Можно ли получить размер блока памяти, выделенный «новый»? - PullRequest
3 голосов
/ 30 апреля 2011

Здравствуйте, мне нужно записать мою кучу, но сейчас я просто думаю перегрузить оператор 'new' своей функцией.

Мне нужно суммировать действительное число байтов памяти, которое было увеличено после malloc () или Heap * () или других функций windows mem

Но сейчас мне нужно проанализировать текущую реализацию кучи. Можно ли получить размер блоков, как выделено функцией HeapAlloc () - HeapSize ()?

.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2011

_msize

Согласно документации это работает для calloc, malloc и realloc .

Однако, по крайней мере, в Visual Studio, используяРаспределитель по умолчанию, он также работает для new .

Не рекомендуется использовать его, однако он может сделать работу для вашего анализа.

Oneеще:

Внешние инструменты, такие как VMMap , могут помочь в таком анализе.

0 голосов
/ 30 апреля 2011

Я вижу, что вы не искали документацию.

HeapSize() существует.


Редактировать Поразмышляя, возможно, вы просили альтернативу - HeapSize(), которую вы можете использовать, когда выполняете распределение самостоятельно с помощью new.

Ответ - нет. Стандартные процедуры выделения не имеют ничего, чтобы захватить информацию о блоке памяти, потому что:

  • Это сильно зависит от реализации, а
  • Вы уже знаете размер блока (потому что вы указали его в первую очередь), так в чем же смысл раздувания?

Фактически HeapSize() является зависимой от реализации функцией для Windows, которая делает это, но вы можете использовать ее только тогда, когда выполнили HeapAlloc().

Существует [также нестандартный] _msize, который можно использовать с malloc и друзьями, но new может не использовать malloc.

Поэтому я предлагаю вам самим отслеживать размеры в вашем распределителе.

...