mirror of
https://github.com/nmap/nmap.git
synced 2025-12-09 06:01:28 +00:00
lookup. The hash table used linear probing which got very slow as the hash table got full. Using std::map is about 10 times faster. The hash table was slow enough that it took the majority of the time for me in an ARP scan of a single address. # nmap -sP 192.168.0.190 mac_prefix_init took 0.49261 s. Nmap done: 1 IP address (1 host up) scanned in 0.59 seconds # nmap -sP 192.168.0.190 mac_prefix_init took 0.04392 s. Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds The memory usage of std::map is probably greater. The hash table used 19037 pointers and about 13000 structures of size 8 (on a 32-bit architecture), or about 176 KB. Assuming the map has left, right, and parent pointers, and a red-black indicator per node, the usage is 16 bytes per prefix plus 8 bytes for the structure data, or 304 KB total. But this makes fingerdiff so much faster, I want to leave it in place at least until this round of OS integration is done.
10 KiB
10 KiB