본문 바로가기

Programming/일반

Windows Memory Mapped File (MMF)

Window 환경에서 Shared Memory 기능이 필요하여 정리하게 되었다.

 

정의

메모리 맵 파일(Memory mapped file, MMF)은 운영 체제에서 파일을 다루는 방법중 하나다.

물리 디스크 파일, 장치, 공유 메모리 객체와 같이 운영 체제에서 파일로 다루는 모든 대상에 대해서 사용가능하며, 메모리 맵 파일을 통해 프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤 가상 메모리 주소에 직접 접근하는 것으로 파일 읽기/쓰기를 대신한다.

 

장점

1. 직접적인 파일 입출력이 필요 없음

2. 파일 처리를 위한 추가적인 자료 구조가 필요 없음

3. 전통적인 파일 입출력 Api 보다 속도가 빠름

4. 프로세스간 메모리 공유 가능

 

단점

1. 파일의 크기(EOF의 위치)를 변경할 수 없음

2. 최적의 파일 접근 방식이 아님

3. 4GB 이상의 데이터는 계산이 복잡해 질 수 있음

 

사용되는 API

CreateFileHANDLE WINAPI CreateFile(
 LPCTSTR lpFileName,                                     
 DWORD dwDesiredAccess,                            
 DWORD dwShareMode,                               

 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
 DWORD dwCreationDisposition,
 DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
); 공유할 파일 생성

 

HANDLE CreateFileMapping(
  HANDLE                hFile,
  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  DWORD                 flProtect,
  DWORD                 dwMaximumSizeHigh,
  DWORD                 dwMaximumSizeLow,
  LPCSTR                lpName
); 파일 매핑 오브젝트 생성

 

LPVOID MapViewOfFile(
  HANDLE hFileMappingObject,
  DWORD  dwDesiredAccess,
  DWORD  dwFileOffsetHigh,
  DWORD  dwFileOffsetLow,
  SIZE_T dwNumberOfBytesToMap
); 가상 메모리(프로세스 내 메모리) 연결

 

BOOL UnmapViewOfFile(

 LPCVOID lpBaseAddress

); 가상 메모리 연결 해제

 

BOOL CloseHandle(
  HANDLE hObject
);  파일 매핑 오브젝트 반환

 

HANDLE OpenFileMapping(
  DWORD  dwDesiredAccess,
  BOOL   bInheritHandle,
  LPCSTR lpName
); 생성 되어 있는 파일 오픈 

'Programming > 일반' 카테고리의 다른 글

Log[2] - Macro  (0) 2020.08.17
Log[1] - assert()  (0) 2020.08.13
Vision Library  (0) 2020.07.16
OpenMP  (0) 2020.07.14
ini  (0) 2020.07.14