Традиционно я использовал функции отчетов о памяти ЭЛТ, например:
_CrtMemState state[3];
_CrtMemCheckpoint(&state[0]);
foo();
_CrtMemCheckpoint(&state[1]);
int const diff = _CrtMemDifference(&state[2], &state[0], &state[1]);
_CrtMemDumpStatistics(&state[2]);
В последнее время я использовал встроенный в Visual Studio инструмент профилирования кучи со снимками. Создайте первый снимок до foo (), второй снимок после foo (), затем посмотрите на результаты сравнения.
Теперь я использовал оба одновременно и сравнил результаты. Я ожидал, что оба результата будут примерно одинаковыми, если не совсем одинаковыми. Но это не так. Размеры памяти сильно различаются. Единственное, что они разделяют, это количество выделений. Я не знаю, что с этим делать. Как я должен интерпретировать эти результаты? Что вызывает разницу? Кому я должен доверять?
Обратите внимание, что результаты CRT не зависят от того, включено профилирование кучи или нет.