c++ - GHashTable 的大小/调整大小

标签 c++ c linux arrays multidimensional-array

这是我的用例:我想使用 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/

相关文章:

c++ - shared_ptr 交换线程安全吗?

c++ - 将 std::vector 序列化为 Boost 二进制存档时出现数据相关故障

c - 哈希表 : how to achieve 0(1)?

c - , char *(*g(char a, int b)) 是什么意思?

c++ - 有没有办法初始化大括号中的成员?

c++ - 不正确的值被打印到文件中。串口通信程序

无法完成国际象棋 table 上马的所有可能走法

linux - 如何拆分大文件并在每次拆分完成时执行命令

linux - Bash 中的自定义路径补全

linux - 我的 .htaccess 不工作 :(