More promising is to put pool addresses ranges in a trie.addr[7] [... . ...] / | \ addr[6] [... . ...] [... . ...] / | \ / | \ addr[5] pool:8 [... . ...] / | \ addr[4] pool:8 [....] pool:5
Actually 64-bit should use a hashtable for the upper 32-bit and then the the 32-bit trie for lower.