Сообщение Re: VirtualAlloc и MapViewOfFile от 16.02.2018 18:50
Изменено 16.02.2018 19:54 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 использовать?
Иными словами мне нужна большая единая область памяти в которую можно маппить или считывать файлы (целиком или частями), проводить запись-чтение этой памяти и затем сбросить эту область на диск в виде одного большого файла.
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 использовать?
Иными словами мне нужна большая единая область памяти в которую можно маппить или считывать файлы (целиком или частями), проводить запись-чтение этой памяти и затем сбросить эту область на диск в виде одного большого файла.
Может быть выделить область для маппинга размером допустим 100 мб,
большую непрерывную область выделить функцией VirtualAlloc и использовать AWE для обмена данными между маппингом и основной памятью?
А потом сбросить всю память на диск функцией WriteFile?
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 использовать?
Иными словами мне нужна большая единая область памяти в которую можно маппить или считывать файлы (целиком или частями), проводить запись-чтение этой памяти и затем сбросить эту область на диск в виде одного большого файла.
Может быть выделить область для маппинга размером допустим 100 мб,
большую непрерывную область выделить функцией VirtualAlloc и использовать AWE для обмена данными между маппингом и основной памятью?
А потом сбросить всю память на диск функцией WriteFile?