C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48818] Re:공유메모리의 크기를 가변적으로 하고 싶습니다.
dd [] 2591 읽음    2007-04-09 12:54
3차원 배열이면 아래 소스대로 하자면 사이즈 계산이 대충 이렇네요.
총사이즈 = cnt * AAA * BBB * sizeof(int)
예를 들면 이렇게 할 수 있네요.

int shared_size = cnt * AAA * BBB * sizeof(int);
typedef struct _tag_ {
   int * array;
} TTAG;
int & array(int i, int j, int k) { return TTAG.array[i*AAA*BBB + j*BBB + k] }

hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, // 대상 파일의 핸들값
                    NULL,                 // 보안정보 관련(default null)
                    PAGE_READWRITE,       // Access Type
                    0,                    // FileMap Object size(high)
            ---------    -->    sizeof(shared_size),   // FileMap Object size(low)
                    MMFileName);          // FileMap Object Name


newhuni 님이 쓰신 글 :
: 안녕하세요... 
: 오늘도 고수님들께 조언을 구하고자 글을 올립니다. ^^;;;
:
: 공유메모리를 사용하여 두개 이상의 프로세스에서 데이타를 교환하고 있습니다.
: 하나의 구조체를 생성하여 공유메모리를 구성하였는데.
: 프로그램 설치환경(시스템 구성)에 따라 데이타의 양이 많이 다릅니다.
: (적게는 수메가, 많게는 수백메가에 다다릅니다.)
:
: 그래서 공유메모리를 가변적으로 구성하고싶습니다.
: 생각하는것은 외부에 INI파일을 만들어 INI파일에 데이타의 크기를 저장하고,
: 실행할때 이 값을 읽어와 공유메모리를 구성하고싶습니다.
: ---------------------------------------------------------------------------------------
:
: 현재 구조체의 데이타 변수(3차원 배열)를 동적으로 할당하는 (아래와 같은)방법으로 접근하고 있습니다.
:
: int AAA = 10;
: int BBB = 10;
: typedef struct _tag_
: {
:     int ***data;
:     make(int cnt) {
:         data = new int**[cnt];
:         for(int i=0;i<cnt;i++){
:             data[i] = new int*[AAA];
:             for(int j=0;j<AAA;j++){
:                 data[i][j] = new int[BBB];
:             }
:         }
:     }
: }TTAG;
:
:
: 그런데 처음 공유메모리를 생성하는 부분에서 구조체의 크기를 줘야 하는데...
: 여기서 부터 막힙니다. 동적으로 할당하다 보니 구조체의 크기가 고정이지 않아
: 크기 자체를 어떻게 줘야 할지... 모르겠습니다.
:
: // Memory Mapped File Create.
: hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, // 대상 파일의 핸들값
:                     NULL,                 // 보안정보 관련(default null)
:                     PAGE_READWRITE,       // Access Type
:                     0,                    // FileMap Object size(high)
:             ---------    -->    sizeof(SharedData),   // FileMap Object size(low)
:                     MMFileName);          // FileMap Object Name
: if(hFileMap == NULL) // Create fail
: {
:     ShowMessage("Unable to create file mapping !");
:     return;
: }
:
: 위와 같이 접근하는게 틀린가요???
: 다른방법으로 공유메모리를 가변적으로 생성할 수 있을까요???
:
: 고수님의 조언부탁드립니다...

+ -

관련 글 리스트
48815 공유메모리의 크기를 가변적으로 하고 싶습니다. newhuni 1283 2007/04/09
48818     Re:공유메모리의 크기를 가변적으로 하고 싶습니다. dd 2591 2007/04/09
48825         Re:Re:공유메모리의 크기를 가변적으로 하고 싶습니다. newhuni 1463 2007/04/09
48827             Re:Re:Re:공유메모리의 크기를 가변적으로 하고 싶습니다. dd 2407 2007/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.