Подсчет байтов "новый" и "удалить" - PullRequest
2 голосов
/ 04 августа 2011

У меня есть проект .net, который использует проект C ++ и потребляет много памяти.

Интересно, есть ли быстрый и простой способ подсчета байтов притока, выделенных новыми и байтами оттока, освобожденными оператором delete,Добавьте некоторые записи или что-то в этом роде.

Исходный код для обоих операторов предоставляется Visual Studio, поэтому я могу взломать его.

Проблема в том, что я вижу огромное потребление ВМ и хочу выяснить, почему.Я пробовал несколько профилировщиков памяти, но ни один из них не может справиться с неуправляемым выделением C ++ в приложении .NET

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Обычно инструменты профилирования памяти, такие как Valgrnid или Rational Purify , могут помочь вам профилировать использование памяти программами.

В случае, если вы все еще хотите иметь собственную реализацию,
Вы можете Заменить глобальные new и delete операторы, перегрузив их, и внутри ваших собственных перегруженных операторов вы можете сохранить количество выделенной памяти.

В случае, если вывыберите / вынуждены следовать второму варианту, есть определенные аспекты, о которых нужно позаботиться, подробности в этом ответе можно прочитать здесь .

Если вы используете STL:
Классы контейнеров STL, в свою очередь, используют операторы Global new & delete для распределений.Поэтому, если вы замените глобальные операторы new & delete, STL будет использовать их вместо стандартных операторов std и delete.

1 голос
/ 04 августа 2011

Вы можете присоединиться с помощью windbg и начать расследование с помощью команды !heap -s.

...