Размер / Изменение размера GHashTable - PullRequest
0 голосов
/ 20 мая 2011

Вот мой пример использования: я хочу использовать GHashTable * glib и использовать IP-адреса в качестве ключей, а объем данных, отправляемых / получаемых этим IP-адресом, в качестве значения.Например, мне удалось реализовать всю проблему в пользовательском пространстве, используя некоторые переменные ядра, чтобы посмотреть на объем по IP-адресу.

Теперь возникает вопрос: предположим, у меня МНОГО IP-адресов (т.е. от 500 000 до 1 000 000 уникальных) => действительно не ясно, какое место выделено и первый размер, который был задан для новой хэш-таблицы, созданной при использовании (g_hash_table_new() / g_hash_table_new_full()),и как все это работает в фоновом режиме.Известно, что при изменении размера хеш-таблицы это может занять много времени.Итак, как мы можем играть с этими параметрами?

1 Ответ

1 голос
/ 20 мая 2011

Ни <a href="http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new" rel="nofollow">g_hash_table_new()</a>, ни <a href="http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new-full" rel="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="nofollow">g_spaced_primes_closest()</a> вид подсказок, что хеш-таблица glib использует внутренний массив простого размера.

Я бы сказал, что хотя миллион ключей - это довольно много, это не удивительно. Попробуйте, а затем измерьте производительность, чтобы определить, стоит ли копать глубже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...