2011-05-20 45 views
0

这里是我的用例:我想使用glib's GHashTable,并使用IP地址作为密钥,并将此IP地址发送/接收的数据量作为值。例如,我成功地使用一些内核变量在用户空间中实现了整个问题,以查看每个IP地址的卷。GHashTable的大小/调整大小

现在的问题是:假设我有IP-地址(即50万最多1,000,000个不重复)=的很多>实在是不明确什么是分配和这是给到一个新的第一大小的空间使用时创建的哈希表(g_hash_table_new()/g_hash_table_new_full())以及整个事情如何在后台运行。众所周知,在调整散列表的大小时,可能需要很长时间。那么我们怎么玩这些参数呢?

回答

1

g_hash_table_new()g_hash_table_new_full()都不允许指定大小。

散列表的大小仅适用于存储在其中的值的数量,您无权访问通常在实现中使用的实际数组大小。

但是,g_spaced_primes_closest()的存在提示glib的哈希表使用一个主要大小的内部数组。

我会说,虽然百万个按键相当多,但并不是非凡的。尝试一下,然后衡量性能,以确定是否值得深入挖掘。

+0

感谢您的答案,但我真的不知道如何在实际程序中使用'g_spaced_primes_closest()'所以我应该在声明一个新的哈希表后使用这个函数?你如何认为它可以用来存储1000个IP @作为密钥? – Ali 2011-05-20 13:51:56