这是我的用例:我想使用 glib's GHashTable并使用 IP 地址作为键,并将此 IP 地址发送/接收的数据量作为值。例如,我成功地使用一些内核变量在用户空间中实现了整个问题,以便查看每个 IP 地址的卷。
现在的问题是:假设我有很多 IP 地址(即 500,000 到 1,000,000 个唯一地址)=> 真的不清楚分配的空间是多少以及给出的第一个大小 使用 (g_hash_table_new()
/g_hash_table_new_full()
) 时创建的新哈希表,以及整个过程如何在后台运行。众所周知,调整哈希表的大小时可能会花费很多时间。那么我们如何使用这些参数呢?
最佳答案
都不是<a href="http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new" rel="noreferrer noopener nofollow">g_hash_table_new()</a>
也不<a href="http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new-full" rel="noreferrer noopener nofollow">g_hash_table_new_full()</a>
让您指定尺寸。
哈希表的大小仅作为存储在其中的值的数量提供,您无权访问通常在实现中使用的实际数组大小。
但是,<a href="http://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-spaced-primes-closest" rel="noreferrer noopener nofollow">g_spaced_primes_closest()</a>
的存在有点暗示 glib 的哈希表使用素数大小的内部数组。
我想说,虽然一百万个 key 很多,但并不是特别多。尝试一下,然后衡量性能以确定是否值得深入挖掘。
关于c++ - GHashTable 的大小/调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070220/