Заставь Windows разрешить мне карту 1 ГБ виртуальной памяти - PullRequest
0 голосов
/ 28 августа 2010

Я использую CreateFileMapping и MapViewOfFile, чтобы попытаться отобразить файл размером почти 1 ГБ. У меня были некоторые проблемы с расширением файла, поэтому я подумал, что попробую использовать CreateFileMapping размером 1 ГБ. Это больше, чем фактический файл, но оно хорошо работает с небольшими файлами.

Похоже, что я могу получить почти для сопоставления 1 ГБ, но не полностью. Это около 16 МБ, если не считать 1 ГБ.

Я использую программу SysInternals VMMap для просмотра макета фрагментов в моей тестовой программе. Это очень странно для меня. VMMap показывает мне, что после моей карты есть свободное пространство виртуальной памяти!

Почему я не могу его использовать?

Это выглядит примерно так:
0x3F6E0000 <- эта часть выделена моей тестовой программе <br> 0x406E0000 <- эта часть бесплатна и имеет размер почти 800 МБ! Дай это мне! </p>

Есть ли магия в этой области памяти сверх 0x40000000? Если так, то почему он позволил мне использовать 0x6E0000?

Кстати, тестовая программа использует MapViewOfFile в 64 отдельных сегментах, поэтому этот фрагмент 0x3F6E0000 не такой большой.

1 Ответ

1 голос
/ 30 августа 2010

Это длинный выстрел, но может случиться так, что что-то маленькое отобразится около 0x40000000 (может быть, DLL?), И поскольку ядро ​​не может найти непрерывное пространство ВА, нужного вам размера (то есть у вас есть достаточно, но это разделено), это не удается.Если вы хотите отобразить в гигантских файлах, это намного проще для современной архитектуры - так как вы получите только 1,5 ГБ гарантированного пространства VA для процессов пользовательского режима в Windows, как только вы вычтете все библиотеки DLL и кучу.

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