Re[6]: Разделяемая память Windows
От: Wavy  
Дата: 02.08.04 04:18
Оценка: 3 (1)
Здравствуйте, 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 >
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.