티스토리 뷰
메모리 맵 파일을 사용하려면 다음 세 단계를 수행해야한다.
- 메모리 맵 파일로 사용할 디스크 상의 파일을 나타내는 커널 오브젝트를 생성하거나 연다.(CreateFile)
- 파일의 크기와 접근 방식을 고려해 파일 매핑 커널 오브젝트를 생성한다.(CreateFileMapping)
- 포르세스의 주소 공간 상에 파일 매핑 오브젝트의 전체나 일부를 매핑시킨다.(MapViewOfFile)
CreateFile
핸들을 받아와 파일 혹은 오브젝트를 생성하거나 열 수 있는 함수. 이 함수를 사용해 운영체제에게 파일 매핑을 수행할 파일의 물리 저장소를 알려준다.
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
나는 디스크에 존재하는 파일이 아닌 메모리 상에 존재(공유 메모리)하는 데이터를 사용하려 한다.
그래서 createfile은 따로 생성할 필요가 없고 createfilemapping에서 따로 설정할 수 있다.
CreateFileMapping
MMF 커널 객체를 만들고 해당 핸들을 반환한다.
HANDLE CreateFileMappingA(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCSTR lpName);
HANDLE hFile : createfile을 사용해 만든 오브젝트를 다루는 핸들. 여기에 INVALID_HANDLE_VALUE를 사용해 페이징파일을 이용해 메모리를 공유한다.
PSECURITY_ATTRIBUTES psa : 보안관련 인자.
DWORD fdwProtect : 페이지 옵션으로 PAGE_READONLY, PAGE_READWRITE 등이 들어감.
DWORD dwMaximumSizeHigh : 매핑할 범위를 지정하는 상위 4바이트
DWORD dwMaximumSizeLow : 매핑할 범위를 지정하는 하위 4바이트
LPCSTR lpName : 고유한 객체 이름을 부여.
MapViewOfFile
LPVOID MapViewOfFile(
[in] HANDLE hFileMappingObject,
[in] DWORD dwDesiredAccess,
[in] DWORD dwFileOffsetHigh,
[in] DWORD dwFileOffsetLow,
[in] SIZE_T dwNumberOfBytesToMap
);
MMF 객체를 대상으로 실제 메모리 매핑을 수행하여 그 메모리의 시작 번지를 반환한다.
hFileMappingObject : MMF 객체 핸들을 연결
dwDesiredAccess : 접근 권한 설정, FILE_MAP_READ, FILE_MAP_WRITE 등
dwFileOffsetHigh : 메모리 주소가 연결될 크기. 상위 4바이트
dwFileOffsetLow : 메모리 주소가 연결될 크기. 하위 4바이트
dwNumberOfBytesToMap : 오프셋으로부터 원하는 크기를 설정.
위 함수들을 사용해 공유 메모리에 작성을한 후 아래 함수를 사용해 매핑을 해제한다.
UnmapViewOfFile
BOOL UnmapViewOfFile(
[in] LPCVOID lpBaseAddress
);
CloseHandle
BOOL CloseHandle(
[in] HANDLE hObject
);
'c++' 카테고리의 다른 글
c++ 공유 메모리 사용 (0) | 2022.05.04 |
---|---|
C++ filesystem 사용 (0) | 2022.03.15 |
STL vector 컨테이너 (0) | 2021.02.21 |
C++ this,string 객체,string 배열 (0) | 2020.07.06 |
C++ 객체포인터,객체 배열, 동적 할당 (0) | 2020.07.03 |
- Total
- Today
- Yesterday
- 이상탐지
- json2html
- 회귀
- porks
- 단순선형회귀
- Python
- AE
- SVM
- cuckoo
- 차량 네트워크
- CAN-FD
- 크로스 엔트로피
- automotive ethernet
- 케라스
- 차량용 이더넷
- HTML
- AVTP
- Ethernet
- problem statement
- AVB
- 딥러닝
- 머신러닝
- many-to-one
- automotive
- SOME/IP
- many-to-many
- 로지스틱회귀
- one-to-many
- 논문 잘 쓰는법
- PCA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |