Когда инициализируется хеш-таблица, как выделяется память для нее? Когда мы добавляем к нему новых членов, как расширяется память, используемая хэш-таблицей? Случается ли, что хеш-таблица не может хранить объекты после фиксированного размера?Как выделяется память для Hashtable?
ответ
Вы можете использовать .NET reflector, чтобы узнать.
System.Collections.Hashtable имеют некоторые жесткие ограничения в нем:
double num = ((float) capacity)/this.loadFactor;
if (num > 2147483647.0)
{
throw new ArgumentException(Environment.GetResourceString("Arg_HTCapacityOverflow"));
}
держать Также в виде значения int.MaxSize
для емкости (я думаю, что пропускная способность может быть таким же, как кол ведра, в зависимости от коэффициента нагрузки).
Если вы удара, что предельный размер, хотя, вы можете захотеть взглянуть на более совершенные методы хранения, чем объект хэш-таблицы CLR в памяти ...
Edit:
памяти для таблица хэш распределяется таким образом: ответ
int num2 = (num > 11.0) ? HashHelpers.GetPrime((int) num) : 11;
this.buckets = new bucket[num2];
[StructLayout(LayoutKind.Sequential)]
private struct bucket
{
public object key;
public object val;
public int hash_coll;
}
знакомства Уилла за то, что HashHelpers.GetPrime
делает.
Hashtable управляет его размером - поэтому вы не столкнетесь с ситуацией, когда вы не можете вставить объект, если у вас не хватает памяти (или если вы пытаетесь вставить дубликат ключа, конечно).
Согласно docs:
Когда фактический коэффициент нагрузки достигает заданного коэффициента нагрузки, число ковшей автоматически увеличивается до наименьшего простого числа, больше, чем в два раза текущего номера из ковшей.
Увидев ответ Мерлина, я действительно должен отменить свой «безграничный комментарий Hashtable», однако, если вы окажетесь в ситуации, когда вы размещаете 2 миллиарда + объектов в Hashtable, вам определенно нужен лучший метод хранения! –
+1. Ссылка на соответствующие документы также весьма полезна :) –
- 1. Как память выделяется ядру?
- 2. Почему память не выделяется?
- 3. Использование как динамически выделяется и статически выделяется общая память
- 4. Правильно релиз выделяется виртуальная память
- 5. Когда выделяется память для элементов HashMap?
- 6. Когда память выделяется для нестационарных конечных переменных?
- 7. Iphone: Где выделяется память для dataSource?
- 8. Как оператор знает, что новая память выделяется
- 9. Как выделяется память при создании свойства класса?
- 10. Как память выделяется макросам в c?
- 11. как память выделяется в c для беззнакового короткого
- 12. Как память выделяется для ссылочных типов в C#?
- 13. Как выделяется память при использовании malloc для создания двумерного массива?
- 14. Возможно ли, что память выделяется методом «CreateSharedMemoryAndSemaphores»?
- 15. Когда память выделяется во время компиляции?
- 16. Что память JVM выделяется по умолчанию
- 17. Где память переменного, возвращенная функция библиотеки выделяется
- 18. Почему память выделяется до запуска кода malloc?
- 19. память затирается, прежде чем выделяется блоком
- 20. где память выделяется при объявлении статического?
- 21. v8 невозможно освободить память выделяется из контекста
- 22. Насколько выделяется память для пользовательского класса в C++
- 23. , где память выделяется для инициализированного указателя char в c
- 24. Память с использованием объекта Hashtable в .Net
- 25. Как выделяется память, когда я объявляю указатель структуры в C
- 26. как выделяется память jvm при работе более 1 tomcat
- 27. Как выделяется и освобождается память * в C и C++?
- 28. Как процессор выделяется для процесса?
- 29. Как проверить, сколько памяти выделяется?
- 30. память выделяется новый INT [10] должно быть высвобождены с удалением []
Привет, может, пожалуйста, объясните мне, как память будет выделяться при инициализации? – TAdhav
@Tanuja: Также обратите внимание, что в .NET есть другие классы словаря, мы специально говорим о 'System.Collections.Hashtable', который может быть не оптимальной для вас :) –
.Net Reflector содержит ответы на многие жизненных вопросов. К сожалению, мины были повреждены с момента последнего обновления ... :) –