Здравствуйте, Poseidon, Вы писали:
P>Здравствуйте, Poseidon, Вы писали:
P>>Здравствуйте! Не секрет что mapviewoffile терпит неудачу при работе с достаточно большим по размеру файлом. P>>Вопрос — можно ли это вылечить если сначала вызвать CreateFileMapping или MapViewOfFile с флагом MEM_RESERVE? P>>Для достаточно большой области памяти. P>>А потом узнать объем памяти которую можно закомитить (кстати какой функцией это можно сделать?) P>>Заключить код работы с памятью в SEH и при возникновении ошибки доступа к памяти вызывать MapViewOfFile P>>повторно с указанием флага MEM_COMMIT и размера блока который система способна выделить?
P>>делал нечто подобное с VirtualAlloc, а теперь хочу разобраться как это можно сделать для образа файла.
P>непонятно вот что в работе маппинга P>CreateFileMapping ... nSizeMax) — выделяет мне область памяти с МАКСИМАЛЬНЫМ размером который мне нужен P>MapViewOfFile(Ex) — можно по частям, предварительно вызвав UnmapViewOfFile
P>А что происходит с выделенной областью памяти?? Она мне непрерывная нужна! Где гарантия что MapView по частям спроецирует P>адрес именно в нужное место?
Зачем такая гарантия нужна? Пусть проецирует, куда получается.
При указании смещения в параметре MapViewOfFile будет спроецирована именно та часть маппинга, которая соответствует этому смещению.
Таким образом, куски MapViewOfFile "рваные", но их базовый CreateFileMapping остаётся непрерывным.
P>Может быть выделить область для маппинга размером допустим 100 мб, P>большую непрерывную область выделить функцией VirtualAlloc и использовать AWE для обмена данными между маппингом и основной памятью?
Маппинги AWE всё равно проецируются куда попало, как и MapViewOfFile, и точно так же достаточно большой AWE не будет проецироваться одним куском.
AWE вообще не для этого, а чтобы получить доступ к большому объёму физической памяти.
С учётом того, что x86 версии Windows всё равно ограничены 4 ГБ физической памяти,
а на х64 можно получить её куда более простым способом, собрав 64-битное приложение, AWE сейчас вообще ни для чего не нужно.