Re[10]: Разделяемая память Windows
От: omb  
Дата: 18.11.07 22:16
Оценка:
> А вот тут самое интересное, у меня по VirtualFree даже в родном процессе память не освобождается (ХР), перепробовал > разные варианты, но память устойчиво освобождается только после вызова CloseHandle(hFileMapping)

Поддерживаю тему, обнаружил у себя на XP именно такие симптомы, рыщу по инету уже пол дня, ответа пока нет.

Корректно работает только такой вариант:
PAGE_WRITECOPY — на CreateFileMapping + FILE_MAP_COPY на MapViewOfFile. Здесь образ создается нормально, т.е. при необходимости, можно сразу открыть окошко маппингом, записать в него что нужно, закрыть, при этом адрес маппинга автоматически отображается в адресное пространство процесса, а выделяемая память корректно освобождается при закрытии view, но данные не сбрасываются обратно в образ(видимо этот вариант годится только для чтения).

Если вручную мепировать view с помощью VirtualAlloc, то ни MEM_DECOMMIT, ни MEM_RELEASE не работают, VirtualFree возвращается c FALSE и GetLastError возвращает нечто вроде "неверный параметр" или "адрес неверный" причем пробовал разными способами: передавал корректный размер региона, выравнивал адреса по странице, по гранулярности, передавал 0 в Size, чтобы освободить весь регион(MSDN). НЕ РАБОТАЕТ!!! А ведь задумано так хорошо.

Буду пробовать сначала распределять вирт. память, а уж потом мепировать в неё view, с помощью MapViewOfFileEx, мож сработает(не уверен, что сработает), уж не знаю что и делать еще.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.