这是我的用例:我想使用glib的GHashTable,并使用IP地址作为密钥,并使用该IP地址发送/接收的数据量作为值。例如,我成功地使用一些内核变量在用户空间中实现了整个问题,以便查看每个IP地址的卷。
现在的问题是:假设我有很多IP地址(即500000到1000000个uniques)=>现在还不清楚为使用(g_hash_table_new()
/g_hash_table_new_full()
)时创建的新哈希表分配的空间和第一个大小,以及整个过程在后台是如何工作的。众所周知,调整哈希表的大小可能需要花费大量时间。那么我们该如何利用这些参数呢?
g_hash_table_new()
和g_hash_table_new_full()
都不允许指定大小。
哈希表的大小只能作为存储在其中的值的数量来使用,您无法访问通常在实现中使用的实际数组大小。
然而,g_spaced_primes_closest()
的存在暗示了glib的哈希表使用了一个素数大小的内部数组。
我想说,虽然一百万把钥匙是相当多的,但这并不罕见。尝试一下,然后衡量性能,以确定是否值得深入研究。