Re[4]: Разделяемая память Windows
От: Wavy  
Дата: 16.07.04 02:15
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:

KOA>Кста, там у рихтера было написано:


KOA>WINDOWS 2000

KOA>В Windows 2000 функция VirtualFree не годится для возврата физической памяти, переданной в свос время проецируемому файлу (созданному с флагом SEC_RESERVE).

KOA>А чем тогда возвращять память???


Если честно, я этому замечанию Рихтера не придал значения.. точнее, не заметил его вовсе и поэтому не стал беспокоиться
Я делаю так:

    hFileMap=CreateFileMapping((HANDLE)0xFFFFFFFF,            //create page file-mapping
                                NULL,                        //no security attr
                                PAGE_READWRITE|SEC_RESERVE,    //reserve memory range
                                0,                            //high-order size
                                Size,                        //low-order size
                                Name);                        //file-mapping name


Уже после того, как память зарезервирована, я ее выделяю по сколько нужно:

    VirtualAlloc(p, size, MEM_COMMIT, PAGE_READWRITE);


и удаляю вот так:

    VirtualFree(p, size, MEM_DECOMMIT);


Не утверждаю, что это единственно правильно и корректно, но это работает

Кстати, при выделении\освобождении памяти неплохо бы еще учитывать ее гранулярность. Дополнительно я завел обертки функций VirtualAlloc и VirtualFree, которые веделяют\освобождают память только постранично (по 4 к).
Вот.
< Rsdn@Home 1.1.4 beta 1 >
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.