그런 다음 프로세스는 CreateFileMapping이 MapViewOfFile 호출에서 반환하는 파일 매핑 개체 핸들을 사용하여 프로세스 주소 공간에서 파일보기를 만듭니다. MapViewOfFile 함수는 파일 뷰p에 대한 포인터를 반환합니다. 그런 다음 프로세스는 CopyMemory 함수를 사용하여 다른 프로세스에서 액세스할 수 있는 뷰에 문자열을 작성합니다. RtCreateSharedMemory는 동일한 이름의 공유 메모리 개체가 이미 있는 경우 RtOpenSharedMemory로 기본설정됩니다. 이러한 플랫폼에서 공유 메모리는 임시 파일 디렉토리에 생성된 “boost_interprocess” 폴더에 생성된 매핑된 파일로 에뮬레이트됩니다. Windows 플랫폼에서 “일반 AppData” 키가 레지스트리에 있는 경우 “boost_interprocess” 폴더가 해당 디렉터리에서 만들어집니다(XP에서는 일반적으로 “C:문서 및 설정모든 사용자응용 프로그램 데이터”와 Vista “C:ProgramData”)에서 만들어집니다. 해당 레지스트리 키 및 유닉스 시스템이 없는 Windows 플랫폼의 경우 공유 메모리는 시스템 임시 파일 디렉토리(“/tmp” 또는 이와 유사한)에서 만들어집니다. RtOpenSharedMemory 이미 만든 공유 메모리 개체를 매핑합니다. 프로세스에서 공유 메모리 개체를 만든 후 추가 프로세스는 RtOpenSharedMemory를 호출하여 공유 메모리를 주소 공간에 매핑할 수 있습니다. RtOpenSharedMemory 명명 된 공유 메모리 개체가 없는 경우 실패 합니다. 그러나 Windows에는 올바르게 관리하기 위해 매우 신중하게 관리해야 하는 공유 메모리 공간이 있습니다. 공유 메모리 공간에 공간을 할당하는 모든 프로세스는 해당 메모리를 명시적으로 해제합니다.

이는 프로세스가 죽을 때 다소 사라지는 로컬 메모리와 는 대조적입니다. 이러한 이유로 네이티브 windows 공유 메모리를 사용 하 여 커널 또는 파일 시스템 지 속성을 시뮬레이션 하는 효과적인 방법은 없습니다 및 Boost.interprocess 메모리 매핑 된 파일을 사용 하 여 공유 메모리를 에뮬레이트 합니다. 이렇게 하면 POSIX와 Windows 운영 체제 간의 이식성이 보장됩니다. 다음 프로세스는 위에 정의된 DLL에서 제공하는 공유 메모리를 사용합니다. 첫 번째 프로세스는 SetSharedMem을 호출하여 문자열을 작성하고 두 번째 프로세스는 GetSharedMem을 호출하여 이 문자열을 검색합니다. 우리가 볼 수 있듯이, 두 개의 복사본이 있다, 하나는 네트워크에서 네트워크와 메모리에 네트워크에서 다른 하나. 그리고 이러한 복사본은 일반적으로 비용이 많이 드는 운영 체제 호출을 사용하여 만들어집니다. 공유 메모리는 이 오버헤드를 방지하지만 두 프로세스를 동기화해야 합니다.

명명된 파이프 및 공유 메모리는 다양한 상황에서 사용됩니다. 두 프로세스는 이름으로 동일한 이름의 파이프에 액세스하고 매핑된 파일 핸들을 통해 공유 메모리에 액세스합니다. 이벤트 개체와 대기 함수를 적절히 사용하여 공유 데이터 읽기 및 쓰기 타이밍을 제어하면 프로세스 동기화가 보장됩니다. 공유 메모리는 각 프로세스의 다른 주소에 매핑할 수 있습니다. 이러한 이유로 각 프로세스에는 모든 DLL 함수에서 사용할 수 있도록 전역 변수로 선언되는 lpvMem의 자체 인스턴스가 있습니다. 이 예제에서는 DLL 전역 데이터가 공유되지 않는다고 가정하므로 DLL을 로드하는 각 프로세스에는 자체 lpvMem 인스턴스가 있습니다. 총 4개의 데이터 복사본이 필요합니다(읽기 2개 및 쓰기 2개). 따라서 공유 메모리는 둘 이상의 프로세스가 메모리 세그먼트를 공유하도록 하는 방법을 제공합니다.

공유 메모리를 사용하면 입력 파일에서 공유 메모리로, 공유 메모리에서 출력 파일까지 두 번만 데이터가 복사됩니다.