Статические отобранные ресурсы оценивают ресурс только один раз, а после этого, если ресурсы меняются, эти изменения не отражаются в привязке. Хотя динамические связанные ресурсы оцениваются каждый раз, когда ресурс необходим.
Короткий ответ на этот вопрос заключается в том, что ни одно из этих значений не является надежным индикатором того, сколько памяти на самом деле использует исполняемый файл, и ни одно из них не подходит для отладки утечки памяти.
Private Bytes относятся к объему памяти, который исполняемый процесс запросил - не обязательно к объему памяти, который он на самом деле использует . Они являются "приватными", потому что (обычно) исключают файлы, отображенные на карте памяти (т.е. общие DLL). Но - вот в чем подвох - они не обязательно исключают память , выделенную этими файлами . Невозможно сказать, было ли изменение приватных байт связано с самим исполняемым файлом, или с подключенной библиотекой. Приватные байты также являются не исключительно физической памятью; они могут быть выведены на диск или в список резервных страниц (т.е. больше не используются, но и не выведены).
Рабочий набор относится к общей физической памяти (ОЗУ), используемой процессом. Однако, в отличие от приватных байтов, сюда также входят файлы с отображением памяти и различные другие ресурсы, поэтому это еще менее точное измерение, чем приватные байты. Это то же самое значение, которое сообщается в "Использовании памяти" диспетчера задач и является источником бесконечного количества путаницы в последние годы. Память в рабочем наборе является "физической" в том смысле, что она может быть адресована без ошибок страницы; однако, список резервных страниц также всё ещё физически находится в памяти, но не сообщается в рабочем наборе, и поэтому при сворачивании приложения вы можете увидеть, что "Использование памяти" внезапно падает.
Виртуальные байты - это общее виртуальное адресное пространство , занимаемое всем процессом. Это похоже на рабочий набор, в том смысле, что он включает в себя файлы, отображенные на карте памяти (общие DLL), а также данные в резервном списке и данные, которые уже были выведены на страницу и находятся где-то на диске в pagefile. Общее количество виртуальных байт, используемое каждым процессом в системе под большой нагрузкой, добавит значительно больше памяти, чем у машины на самом деле.
Итак, отношениями являются:
Есть еще одна проблема: так же как общие библиотеки могут выделять память внутри модуля вашего приложения, что приводит к потенциальным ложным срабатываниям, сообщаемым в Private Bytes вашего приложения, ваше приложение может также выделять память внутри модулей shared, что приводит к ложным срабатываниям negatives. Это означает, что на самом деле у вашего приложения может произойти утечка памяти, которая вообще никогда не проявляется в Private Bytes. Вряд ли, но возможно.
Private Bytes - это разумное приближение объема памяти, используемого Вашим исполняемым приложением, и может быть использовано для того, чтобы сузить список потенциальных кандидатов на утечку памяти; если Вы видите, что число постоянно и бесконечно растет, то Вы захотите проверить этот процесс на наличие утечки. Однако не может доказать наличие или отсутствие утечки.
Одним из наиболее эффективных инструментов для обнаружения/устранения утечек памяти в Windows на самом деле является Visual Studio (ссылка идет на страницу использования VS для устранения утечки памяти, а не на страницу продукта). Другая возможность - Rational Purify Rational Purify. В Microsoft также есть более общий документ о лучших практиках на эту тему. В этом предыдущем вопросе перечислено больше инструментов.
Надеюсь, это прояснит некоторые вещи! Отслеживание утечек памяти - одна из самых сложных вещей при отладке. Удачи.
Вы не должны пытаться использовать perfmon, диспетчер задач или любой подобный инструмент для определения утечек памяти. Они хороши для определения тенденций, но не более того. Цифры, которые они сообщают в абсолютном выражении, слишком расплывчаты и агрегированы, чтобы быть полезными для конкретной задачи, такой как обнаружение утечки памяти.
Предыдущий ответ на этот вопрос дал прекрасное объяснение того, что это за типы.
Вы спрашиваете о рекомендации по использованию инструмента: Я рекомендую Memory Validator. Возможность мониторинга приложений, которые выделяют миллиарды памяти.
http://www.softwareverify.com/cpp/memory/index.html
Заявление об ограничении ответственности: я разработал средство проверки памяти.