Проблемы с использованием общей памяти с CreateFileMapping и MapViewofFile

У меня есть 2 вопроса по поводу использования общей памяти. Я использую CreateFileMapping для создания общей области памяти между двумя процессами.

1) Я понимаю, что мне нужно вызывать CloseHandle для каждого дескриптора, возвращенного из вызова CreateFileMapping или OpenFileMapping, чтобы освободить память. Мой вопрос: все ли дескрипторы закрываются надлежащим образом и память освобождается Windows XP/7, если программы, использующие общую память, выходят без вызова CloseHandle? IE - есть ли возможность утечки памяти после того, как все процессы, использующие память, были закрыты?

2) Я использую MapViewofFile, чтобы получить указатель на память. В одном случае я предположил, что разделяемая память всегда будет существовать в контексте метода. Поэтому я сохранил возвращаемое значение MapViewOfFile в качестве указателя и закрыл дескриптор памяти, и я просто использую указатель на общую память (но все еще блокирую доступ к ней). Это безопасно или мне следует вызывать MapViewOfFile каждый раз, когда я обращаюсь к общему мему?

Спасибо,

Ян


person Ian    schedule 22.12.2011    source источник


Ответы (1)


1) Да, все дескрипторы закрываются, когда процесс завершается, независимо от того, умирает он или завершается хорошо. Здесь нет утечек.

2) Пока вы не вызываете UnmapViewOfFile, память по-прежнему будет доступна процессу, даже если дескриптор был закрыт:

Хотя приложение может закрыть дескриптор файла, используемый для создания объекта сопоставления файлов, система удерживает соответствующий файл открытым до тех пор, пока последнее представление файла не будет удалено.

person rodrigo    schedule 22.12.2011