Здравствуйте, Wavy, Вы писали:
W>Здравствуйте, King of a Stellar War, Вы писали:
KOA>>Кста, там у рихтера было написано:
KOA>>WINDOWS 2000
KOA>>В Windows 2000 функция VirtualFree не годится для возврата физической памяти, переданной в свос время проецируемому файлу (созданному с флагом SEC_RESERVE).
KOA>>А чем тогда возвращять память???
W>Если честно, я этому замечанию Рихтера не придал значения.. точнее, не заметил его вовсе и поэтому не стал беспокоиться
W>Я делаю так:
W>W> hFileMap=CreateFileMapping((HANDLE)0xFFFFFFFF, //create page file-mapping
W> NULL, //no security attr
W> PAGE_READWRITE|SEC_RESERVE, //reserve memory range
W> 0, //high-order size
W> Size, //low-order size
W> Name); //file-mapping name
W>
W>Уже после того, как память зарезервирована, я ее выделяю по сколько нужно:
W>W> VirtualAlloc(p, size, MEM_COMMIT, PAGE_READWRITE);
W>
W>и удаляю вот так:
W>W> VirtualFree(p, size, MEM_DECOMMIT);
W>
W>Не утверждаю, что это единственно правильно и корректно, но это работает
W>Кстати, при выделении\освобождении памяти неплохо бы еще учитывать ее гранулярность. Дополнительно я завел обертки функций VirtualAlloc и VirtualFree, которые веделяют\освобождают память только постранично (по 4 к).
W>Вот.
Я у Рихтера об этом способе рашаривания куска памяти немного не понял:
1. Нужно ли вызывать MapViewOfFile после CreateFileMapping?
2. Что передавать в качестве первого операнда в VirtualAlloc?
3. Что делать с тем указателем, что возвращает VirtualAlloc?
4. Как мне освобождать память выделенную в другом процессе?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.