Что такое «виртуальный размер» в проводнике процессов sysinternals - PullRequest
14 голосов
/ 13 июня 2010

Мое приложение работает в течение нескольких часов. Никакого увеличения значения (vmsize, memory) диспетчера задач не происходит.Но через несколько часов я выхожу из ошибок памяти.

В sysinternals я вижу, что виртуальный размер постоянно увеличивается, и когда он достигает около 2 ГБ, я начинаю получать ошибки памяти.

Такчто это за утечка памяти?Как я могу продемонстрировать это с помощью кода?Можно ли воспроизвести то же самое с любым фрагментом кода, в котором не увеличивается ни одно из значений памяти, а только виртуальный размер в проводнике процессов sysinternsl?

спасибо за любые предложения

Ответы [ 4 ]

8 голосов
/ 13 июня 2010

Виртуальный размер - это количество страниц, выделенных процессом, те страницы, которые в данный момент не находятся в рабочем наборе (физически загружены в ОЗУ), будут в системном файле страницы.

Обычно вы выделяете памятьне освобожден.Это может быть трудно отследить в коде без специальных инструментов, таких как Rational Purify или Boundschecker, например.С sysinternals вы видите, что должна быть утечка, но она ни в коем случае не скажет вам, где ...

Если ваше программное обеспечение не так велико, вы можете попытаться выйти из системы "new" и "delete"и посмотрите, не слишком ли много объектов в памяти, управляя списками выделенных объектов (так сказать, создавая собственный отладчик памяти).В мире Windows есть несколько помощников, таких как утилиты проверки памяти CRT от Microsoft .Они полезны в некоторых случаях.

4 голосов
/ 13 июня 2010

Судя по всему, у вас заканчивается адресное пространство.32-битная Windows делит адресное пространство пополам: половина для пользовательской программы и половина для системы, поэтому каждый получает по 2 гигабайта.

Наиболее частая причина этого - фрагментация пространства памяти до точкичто вы не можете найти достаточно большой кусок для выделения.К сожалению, не зная больше о том, что вы делаете, трудно догадаться, почему это может произойти.

2 голосов
/ 13 июня 2010

Согласно этой теме на форуме sysinternals, виртуальный размер соответствует адресному пространству процесса (я предполагаю, что зафиксированные и зарезервированные страницы памяти)

1 голос
/ 09 сентября 2014

Похоже, что Virtual Size включает в себя выделенные страницы следующих типов: MEM_MAPPED (для представлений данных) MEM_IMAGE (для представлений исполняемых изображений) MEM_PRIVATE (обычная выделенная память страницы)

Это не единственная «память» для данных, но также включает в себя пространство страницы для * .dll-s и механизм FileMapping.

...