2011-05-20 108 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