2011-12-22 3 views
2

공유 메모리 사용에 대한 2 가지 질문이 있습니다. CreateFileMapping 두 프로세스간에 공유 메모리 영역을 만들려면 사용하고 있습니다.CreateFileMapping 및 MapViewofFile에서 공유 메모리 사용에 대한 우려

1) 메모리를 해제하기 위해 CreateFileMapping 또는 OpenFileMapping 호출에서 반환 된 모든 핸들에서 CloseHandle을 호출해야한다는 것을 알고 있습니다. 내 질문은 CloseHandle을 호출하지 않고 공유 메모리를 사용하는 프로그램이 종료되면 Windows XP/7에서 모든 핸들을 적절히 닫고 mem을 할당 해제합니까? IE를 사용하는 모든 프로세스가 닫힌 후에 IE 누출 가능성이 있습니까?

2) MapViewofFile을 사용하여 mem에 대한 포인터를 가져옵니다. 1 인스턴스에서 나는 공유 메모리가 항상 메소드 컨텍스트에 존재한다고 가정했습니다. 그래서 MapViewOfFile의 반환 값을 포인터로 저장하고 mem에 대한 핸들을 닫았으며 공유 된 mem에 대한 포인터를 사용하고 있습니다 (그러나 여전히 액세스를 잠그고 있습니다). 이게 안전한가요? 아니면 공유 mem에 액세스 할 때마다 MapViewOfFile을 호출해야합니까?

감사

이안

답변

6

1) 예, 모든 핸들은 프로세스가 종료되면, 아무리이 죽거나 좋게 마무리하는 경우에는 폐쇄된다. 여기에는 누수가 없습니다.

2)만큼 당신이 UnmapViewOfFile를 호출하지 않는 한, 메모리는 여전히 핸들이 닫힌 경우에도 프로세스에 액세스가가 능 : 응용 프로그램에 사용되는 파일 핸들을 닫을 수

있지만 파일 매핑 개체를 만들면 파일의 마지막보기가 매핑 해제 될 때까지 해당 파일이 열립니다.

+0

감사합니다. 그게 전부였다. – Ian