메모리 맵 파일(Memory Map File)
- Module/WindowsMFC
- 2009. 11. 3.
메모리 맵 파일!?
윈도우즈는 물리적인 메모리가 부족할 경우 하드 디스크 페이징 파일(Paging File)을 메모리 대신 사용한다.
마치 페이징 파일이 물리적인 메모리의 일부인 것 처럼 프로세스의 주고 공간에 맵하여 사용하며 필요한 경우
RAM으로 읽어오므로 응용 프로그램의 입장에 볼 때 페이징 파일은 속도가 좀 느릴 뿐 램과 전혀 다를 것이 없다.
메모리 맵 파일은 Win32에서 프로세서간 메모리를 공유하는 유일하고 합법적인 방법이다.
두개의 프로세스가 하나의 메모리 맵 파일을 동시에 액세스할 수 있기 때문에 메모리 맵 파일을 통해
데이터를 주고 받을 수 있고 동시에 한 메모리 영역을 액세스 할 수도 있다.
소스내용은 찾아보시길,,,하고 인터넷에 있는 내용 올림.
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
/*
HANDLE hFile, hFMap;
char *PtrInFile;
hFile = CreateFile("test.txt", GENERIC_READ, 0,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE){
printf("Not found file\n");
}
else{
// 파일 맵핑 오브젝트를 만든다.
hFMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
// 주소 공간에 맵한다.
PtrInFile = (char *)MapViewOfFile(hFMap, FILE_MAP_READ, 0, 0, 0);
printf("PtrInFile:%s\n", PtrInFile);
UnmapViewOfFile(PtrInFile);
CloseHandle(hFMap);
CloseHandle(hFile);
}
return 0;
}
Think!!
이녀석이 왜 필요할까?, 메모리 맵 파일? 프로세스간 통신, 하나의 변수를 공유한다?
운영체제의 입장에서는 이거를 허용하지 않는다. 어쩔!? 원래 남에꺼는 손대면 안되지!
하지만 Text File 의 읽고 쓰는 방식인데...거기에 변수의 값을 지정하고 프로세스가 각각 동기를 이루면 되는거 아닌가?
무슨 절차를 저렇게 해야할까?...
아직 더 파보지 않았지만 말야, 이리저리 검색 해본결과,
난 네트워크를 이용해서 통신하는 방법이 조금 더 나아 보이는데...
서로다른 컴퓨터에서 메모리 공유를 할 수 는 없 는 거 니 깐 !?
메모리 맵 파일(소스)
http://rlehddnr.wooriweb.net/entry/%B8%DE%B8%F0%B8%AE-%B8%CA-%C6%C4%C0%CF
'Module > WindowsMFC' 카테고리의 다른 글
MFC 애플리케이션 함수 호출 순서 (0) | 2009.11.24 |
---|---|
MFC MDI 타이틀 제목 하나로 통합하기 (0) | 2009.11.24 |
MFC 다이얼로그 메모리 해제 (0) | 2009.08.25 |
MFC - 다이얼로그 생성시 발생되는 메세지들... (0) | 2009.08.07 |
[C] 유니코드 char, T2A, A2T (0) | 2009.08.07 |