Как образ виртуальной памяти может быть в 1000 раз больше, чем пространство на жестком диске? - PullRequest
0 голосов
/ 19 ноября 2010

Я работаю над 32-битным приложением Windows, которое иногда может нехватать памяти (2 ГБ виртуального адресного пространства). Когда я смотрю на то, как распределяется виртуальная память с помощью WinDbg или VMMap, я замечаю образ dll, который занимает 85 Мбайт памяти. В частности, 84 МБ этого файла находятся в разделе «.data» и имеют защиту «Копировать при записи». Когда я смотрю на жесткий диск, однако, DLL всего 81 КБ.

Как образ dll может быть более чем в 1000 раз больше в виртуальном адресном пространстве, чем на диске? Обратите внимание, что я спрашиваю только об «изображении», а не о кучах или стеках или отображенной памяти, а только об изображении - я понимаю, что, конечно, кучи, стеки, отображенная память и т. Д. Будут дополнительными.

1 Ответ

6 голосов
/ 19 ноября 2010

Попробуйте создать пустой .dll и добавить это в область видимости файла:

char global_stuff[84*1024*1024];

Это должно объявить запись в разделе .bss. Это раздел изображения, который определяет ноль инициализированных данных. Поскольку эти данные инициализируются нулями, довольно просто оптимизировать, просто объявив, насколько большим они должны быть при запуске, вместо того, чтобы хранить группу нулей на диске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...