Здравствуйте, Wavy, Вы писали:
W>Здравствуйте, King of a Stellar War, Вы писали:
KOA>>2. Что передавать в качестве первого операнда в VirtualAlloc?
W>Адрес, по которому желательно разместить выделяемый блок. Или NULL (а может, какую-то константу...) если хочешь получить кусок по произвольному адресу. Кажется, в том же Рихтере написано, что это будет адрес самого нижнего свободного куска. MSDN рулит.
KOA>>3. Что делать с тем указателем, что возвращает VirtualAlloc?
W>Это указатель на выделенную область памяти. Делай с ним что хочешь.
W>Можешь, например, привести его к (SomeClass*) — при условии что sizeof(SomeClass) == SizeOfAllocatedBlock, и пользоваться как простым объектом.
Я так понял, что адрес переданый в VirtualAlloc и полученный после его вызова, будут совпадать, если по этому адресу возможно разместить кусок памяти указанного размера? Иначе, система найдёт другую область?
KOA>>4. Как мне освобождать память выделенную в другом процессе?
W>С этим проблема. Чтобы освободить блок, выделенный другим процессом, нужно точно знать что он больше не используется и не будет использоваться тем процессом. Для этого можно ставить маркеры в блоках, но в любом случае, насколько мне известно, — без собственного менеджера памяти (кучи) тогда не обойтись.
W>А освобождается память, насколько я понмню — VirtualFree.
А вот тут самое интересное, у меня по VirtualFree даже в родном процессе память не освобождается (ХР), перепробовал разные варианты, но память устойчиво освобождается только после вызова CloseHandle(hFileMapping)
W>Если хочешь, могу тебе прислать кусочки своего кода.
Спасибо, было бы неплохо
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.