Информация об изменениях

Сообщение Re: VirtualAlloc и MapViewOfFile от 16.02.2018 18:50

Изменено 16.02.2018 19:01 Poseidon

Re: VirtualAlloc и MapViewOfFile
Здравствуйте, Poseidon, Вы писали:

P>Здравствуйте! Не секрет что mapviewoffile терпит неудачу при работе с достаточно большим по размеру файлом.

P>Вопрос — можно ли это вылечить если сначала вызвать CreateFileMapping или MapViewOfFile с флагом MEM_RESERVE?
P>Для достаточно большой области памяти.
P>А потом узнать объем памяти которую можно закомитить (кстати какой функцией это можно сделать?)
P>Заключить код работы с памятью в SEH и при возникновении ошибки доступа к памяти вызывать MapViewOfFile
P>повторно с указанием флага MEM_COMMIT и размера блока который система способна выделить?

P>делал нечто подобное с VirtualAlloc, а теперь хочу разобраться как это можно сделать для образа файла.


непонятно вот что в работе маппинга
CreateFileMapping ... nSizeMax) — выделяет мне область памяти с МАКСИМАЛЬНЫМ размером который мне нужен
MapViewOfFile(Ex) — можно по частям, предварительно вызвав UnmapViewOfFile

А что происходит с выделенной областью памяти?? Она мне непрерывная нужна! Где гарантия что MapView по частям выделит
адрес именно в нужном месте этого непрерывного пространства?
Может лучше VirtualAlloc + ReadFile использовать?
Re: VirtualAlloc и MapViewOfFile
Здравствуйте, Poseidon, Вы писали:

P>Здравствуйте! Не секрет что mapviewoffile терпит неудачу при работе с достаточно большим по размеру файлом.

P>Вопрос — можно ли это вылечить если сначала вызвать CreateFileMapping или MapViewOfFile с флагом MEM_RESERVE?
P>Для достаточно большой области памяти.
P>А потом узнать объем памяти которую можно закомитить (кстати какой функцией это можно сделать?)
P>Заключить код работы с памятью в SEH и при возникновении ошибки доступа к памяти вызывать MapViewOfFile
P>повторно с указанием флага MEM_COMMIT и размера блока который система способна выделить?

P>делал нечто подобное с VirtualAlloc, а теперь хочу разобраться как это можно сделать для образа файла.


непонятно вот что в работе маппинга
CreateFileMapping ... nSizeMax) — выделяет мне область памяти с МАКСИМАЛЬНЫМ размером который мне нужен
MapViewOfFile(Ex) — можно по частям, предварительно вызвав UnmapViewOfFile

А что происходит с выделенной областью памяти?? Она мне непрерывная нужна! Где гарантия что MapView по частям спроецирует
адрес именно в нужное место?
Может лучше VirtualAlloc + ReadFile использовать?