Здравствуйте, King of a Stellar War, Вы писали:
KOA>Я у Рихтера об этом способе рашаривания куска памяти немного не понял:
KOA>1. Нужно ли вызывать MapViewOfFile после CreateFileMapping?
О да.
Кстати, я сначала делаю OpenFileMapping, чтобы выяснить — я создал маппинг или он уже был.
Если уже есть — делаю MapViewOfFile. Иначе — делаю CreateFileMapping и запоминаю, что это именно я создал маппинг.
KOA>2. Что передавать в качестве первого операнда в VirtualAlloc?
Адрес, по которому желательно разместить выделяемый блок. Или NULL (а может, какую-то константу...) если хочешь получить кусок по произвольному адресу. Кажется, в том же Рихтере написано, что это будет адрес самого нижнего свободного куска. MSDN рулит.
KOA>3. Что делать с тем указателем, что возвращает VirtualAlloc?
Это указатель на выделенную область памяти. Делай с ним что хочешь.
Можешь, например, привести его к (SomeClass*) — при условии что sizeof(SomeClass) == SizeOfAllocatedBlock, и пользоваться как простым объектом.
KOA>4. Как мне освобождать память выделенную в другом процессе?
С этим проблема. Чтобы освободить блок, выделенный другим процессом, нужно точно знать что он больше не используется и не будет использоваться тем процессом. Для этого можно ставить маркеры в блоках, но в любом случае, насколько мне известно, — без собственного менеджера памяти (кучи) тогда не обойтись.
А освобождается память, насколько я понмню — VirtualFree.
Если хочешь, могу тебе прислать кусочки своего кода.
P.S.
Эхх... Написать бы об этом все хаарошенькую такую статью...
Но некогда, ибо лень.
< Rsdn@Home 1.1.4 beta 1 >