
02.10.2011, 16:45
|
 |
Гуру
|
|
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
|
|
Вот что мне дала гугля:
Цитата:
WorkingSetSize определяет количество страниц физической оперативной памяти, которое одновременно доступно твоему процессу (остальные старницы будут виртуальными, т.е. отсвопленными). Это ограничение наложено для того, чтобы не поддерживать громадные страничные индексы для каждого процесса.
...
Вообще измерени памяти в Windows достаточно тонкая штука. В свое время писал оболочку для соревнований, так там память считается довольно хитрыми методами .
Действительно WorkingSetSize можно использовать для определения размера памяти, используемой программой. Но при это нужно учитывать, что она показывает только ИСПОЛЬЗОВАННУЮ память. Т.е. например, ты выделил блок размером 1Мб, но Windows не будет выделять эту память реально до тех пор, пока ты к этой памяти не обратишся, соответсвенно и WorkingSetSize увеличиваться не будет. После того как ты обратишься к перовому байты выделенной памяти, будет выделена память размером в страницу (опять не весь 1 Мб). WorkingSetSize увеличится на размер страницы. Тоже самое происходит и при статическом выделении памяти под переменные.
Вообще, винда исповедует "ленивое" управление памятью, например если ты загружаешь программу, то она отображает ее на память, но реально не грузит. Загрузка страницы данных в физическую память происходит при первом обрашении к этой странице. Именно в момент такой загрузки и выделяется память, а также увеличивается WorkingSetSize на размер страницы.
З.Ы. Кстати, такой механизм загрузки портит много крови, так как обращение к какой-нибудь DLL может резко увеличивать WorkingSetSize даже при том, что эта DLL может вообще не выделять память
|
Вывод: подсчет памяти для программы - тайна покрытая мраком. 
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
|