Размер объекта в байтах, включая размер элементов - PullRequest
3 голосов
/ 06 апреля 2009

Я хочу знать (для отладки и регистрации) размер объекта в байтах, но не как

Sizeof (Object)

но как "глубокий размер". Например, если объект содержит хеш-карту или список, к результату должен быть добавлен реальный размер, необходимый для этой хеш-карты или списка. Есть ли способ сделать это без добавления

property Size : LongWord read GetByteSize;

каждому маленькому предмету?

Наверное, глупый вопрос, но я попробую;)

РЕДАКТИРОВАТЬ : только что нашли почти тот же вопрос:

Размер экземпляра рекурсивного класса в Delphi

Полагаю, вопрос можно закрыть. Извините за это!

Ответы [ 2 ]

1 голос
/ 06 апреля 2009

К сожалению, вам нужно написать код для этого самостоятельно.

Не уверен, что это работает, но вы можете стать очень грязным:

  • Найти размер объекта в байтах. Использование TObject.InstanceSize.
  • Приведите каждую группу из 4 байтов к указателю, а затем проверьте, является ли это объектом TObject. Вы должны быть в состоянии сделать это. Если это объект TObject, вам следует повторить шаг.
0 голосов
/ 06 апреля 2009

Поскольку это для отладки, вы смотрели на распределитель памяти FastMM4? У него есть несколько полезных вещей для отслеживания утечек памяти.

...