Shm으로 공유된 pointer에서 new 연산자로 생성한 영역은 공유를 할 수 없을까요?

yundorri의 이미지

안녕하세요, 눈팅 회원입니다. ^^

두 프로세스 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내에 동적으로 메모리를 할당할 방법은 없는가 궁금합니다.

고수 님들의 조언 부탁드립니다.~

yundorri의 이미지

이런 글이 있었군요.

http://kldp.org/node/2849

검색을 생활화 하지 않아 죄송합니다.
그렇다면, 방법이 없는것일까요??

freemckang의 이미지

shmget(2)와 shmat(2)를 사용한 것만으로 malloc이 된 것으로 봐야 되지 않나? 생각합니다..

Man pages는 벌써 보셨겠지만.. shmget - allocates a shared memory segment이고, 2번째 인자가 size이니.. 링크 걸어놓으신 글타래처럼 자신만의 mymalloc, myfree를 만들어서 관리할 수도 있겠네요.. :)

당연히, 원하신 답변이 아닐 것 같습니다만, 방법이 없지 않나 생각됩니다.

혹시 방법이 있을까요?? (커널 수정없이... ㅎㅎ)

句日新, 日新 日新 又日新.

ymir의 이미지

> 그래서 나중에 든 생각은 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 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.