HeapAlloc бухгалтерия

Я прочел (http://www.nobugs.org/developer/win32/debug_crt_heap.html), что HeapAlloc выделяет некоторую память для учета в дополнение к запрошенному блоку памяти. Размер бухгалтерской информации должен составлять 40 байтов (8 байтов до блока и 32 после).

Тем не менее, когда я запускаю тест с моим VS2010, фактическое потребление памяти оказывается значительно меньше.
Например, я вставляю 1М целых в набор. Я написал функцию ловушки для malloc, чтобы убедиться, что каждая вставка запускает отдельный запрос на динамическое выделение памяти для создания нового узла. Один узел, согласно хуку, занимает 20 байтов. Если мы добавим 80 байтов служебной информации, общий объем памяти для одного узла должен составить 100 байтов. То есть набор должен потреблять ~ 100 мегабайт, в то время как согласно TaskManager это занимает всего 32 мегабайта.

Поэтому у меня есть следующие вопросы:

Действительно ли накладные расходы 40 байтов?
Применяются ли накладные расходы к каждому блоку HeapAlloc?

2

Решение

Это, кажется, вызывает путаницу. Я не уверен, показывает ли диспетчер задач физическую или виртуальную память.

Если ваши распределения собираются поменять файл, они могут не отражаться в диспетчере задач. Вы должны попробовать более продвинутые инструменты мониторинга производительности.

0

Другие решения

Я уверен malloc я не ожидаю, что HeapAlloc вызывает для каждого выделения. Конечно, в случае с glibc ОС вызывается только для того, чтобы дать больший кусок памяти, и это делится — с меньшими издержками, чем накладные расходы на выделение ОС.

Вы можете проверить это, потратив время на malloc против вызова HeapAlloc миллион раз для небольшого блока памяти (например, 20 байтов). Что занимает больше времени? Если HeapAlloc быстрее, то вполне вероятно, что HeapAlloc призван для каждого malloc — но я ожидаю, что malloc значительно быстрее.

0

По вопросам рекламы [email protected]