[C++] Windows DLL 전역변수 공유 메모리 셋팅 방법 (IPC)
업데이트:
Windows DLL 전역변수 공유 메모리 셋팅 방법
개요
DLL 배포시 여러 프로세스에서 DLL에 접근하는 경우가 생길 수 있다.
이 경우, 단순 API처럼 특정 요청에 대한 결과만 응답해주면 되는 것이 아닌, 전역변수로 어떠한 값을 보존 후, 여러 DLL에서 이를 활용할 때가 있을 수 있다.
DLL은 로드시 DLL안의 메모리는 항상 프로세스별로 새로 초기화가 된다.
그래서 우리는 프로세스별로 DLL을 각각 초기화해서 사용할 수 밖에 없고, 이 전역변수를 공유 메모리로 설정하면 어느 프로세스에서나 동일한 메모리값이 유지가 된다.
IPC
IPC란 Inter Process Communication
의 약자이고 프로세스들끼리 서로 데이터를 주고 받는 방법을 의미한다.
IPC 방법은 다음 두 가지다.
- 메시지 전달
- 메모리 공유
여기서 소개할 방법은 Windows에서 제공하는 2번 메모리 공유 방법이다.
전역 변수 공유 메모리
아래는 코드 예시다.
#pragma data_seg (".shareEx")
int i = 0;
char a[32]n = "hello world";
#pragma data_seg()
#pragma comment(linker, "/section:shareEx,RWS")
C++ 상단 헤더아래 전역변수 정의를 #pragma data_seg
로 감싸준다.
여기서 .shareEx
값은 세그먼트 이름으로 보면 된다. 입맛에 맞게 변경해주면 된다.
그리고 링크를 걸어주면된다.
/section:shareEx,RWS
에서 RWS는 Read/Write/Shared 이다. 필요한 경우 변경하면 된다.
주의해야할 점은, 반드시 해당 변수 초기화를 저 전처리 구문 내에서 해야한다는 점이다.
선언만 할 경우, 공유가 되지않는다.
이제 여러 프로세스에서 접근했을 때, 메모리 값이 잘 유지 되는 것을 확인 할 수있다.
하지만 STL 컨테이너는 공유가 안되는 것을 확인할 수 있다.
이 내용은 다음 포스팅에서 다루도록 하겠다.
- 참고자료
- https://learn.microsoft.com/ko-kr/previous-versions/visualstudio/visual-studio-2008/h90dkhs0(v=vs.90)?redirectedfrom=MSDN
댓글남기기