Shm으로 공유된 pointer에서 new 연산자로 생성한 영역은 공유를 할 수 없을까요?
글쓴이: yundorri / 작성시간: 월, 2012/10/15 - 12:51오후
안녕하세요, 눈팅 회원입니다. ^^
두 프로세스 A,B는 shared memory로 데이터를 공유하고 있고 그 내부에는 "char* p" 가 있다고 가정하겠습니다.
프로세스 A에서 p = new char[65535] 정도로 할당을 하였는데요,
프로세스 B에서는 p에 memcpy() 등으로 write하려면 segmentation fault error가 발생하는데요,
생각을 해 보면 p는 A에서 생성하였든, B에서 생성하였든 새롭게 생성된 영역의 주소를 가리키는 거라면
A든 B든, 나중에 새로 shared memory에 붙을 수 있는 C든 관계없이 접근 가능해야 된다고 생각되는데요
저렇게 오류가 발생하니 당황스럽네요.
그래서 나중에 든 생각은 p를 공유한 것이지, A에서 생성한 영역을 공유한 게 아니라서 그런가 생각이 들기도 하고...
그렇담, shared memory내에 동적으로 메모리를 할당할 방법은 없는가 궁금합니다.
고수 님들의 조언 부탁드립니다.~
Forums:
이런 글이
이런 글이 있었군요.
http://kldp.org/node/2849
검색을 생활화 하지 않아 죄송합니다.
그렇다면, 방법이 없는것일까요??
음...
shmget(2)와 shmat(2)를 사용한 것만으로 malloc이 된 것으로 봐야 되지 않나? 생각합니다..
Man pages는 벌써 보셨겠지만.. shmget - allocates a shared memory segment이고, 2번째 인자가 size이니.. 링크 걸어놓으신 글타래처럼 자신만의 mymalloc, myfree를 만들어서 관리할 수도 있겠네요.. :)
당연히, 원하신 답변이 아닐 것 같습니다만, 방법이 없지 않나 생각됩니다.
혹시 방법이 있을까요?? (커널 수정없이... ㅎㅎ)
句日新, 日新 日新 又日新.
음 ..
> 그래서 나중에 든 생각은 p를 공유한 것이지, A에서 생성한 영역을 공유한 게 아니라서 그런가 생각이 들기도 하고...
맞습니다. A 와 B 는 p 라는 char * 타입의 변수를 공유한 것이지, p 가 가리키는 메모리 공간을 공유한 것이 아닙니다.
p 에 저장된 값은 A 입장에서는, new 로 할당한 공간이지만, B 입장에서는 그저 아무런 의미없는 쓰레기 값입니다.
가능한 최대 크기로 잡아서 그 안에서 적당히 영역을 나눠서 쓰시거나..
아예 multi thread 로 바꿔서 적당히 동기화 해서 쓰는 것도 괜찮을 것 같네요.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기