• ベストアンサー

malloc後、frokを行った場合

unix(Solaris)系、CCコンパイラ初心者です。 質問内容は2点あります。 1点目 たとえば変数Aを親プロセスでmallocを行い、その後forkした場合は 変数Aは子プロセスにも引き継がれると思いますが、 解放する場合は親、子プロセス両方でfreeする必要はあるのでしょうか? 2点目 1点目のmallocした変数Aをshmで共有メモリにした場合は 親又は子どちらか片方でfreeすればよろしいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

質問の表現が変できちんと理解されているか心配です。 まずmallocで確保するのはメモリ領域(アドレス空間)で、変数はそれを指すだけです。 forkではアドレス空間がコピーされますので、子プロセスではそれぞれに開放(free)しなければいけません。 2つ目、mallocした変数をshmで共有メモリにするという表現はいまいち分かりませんが、mallocする代りにshm_openしたのなら、子プロセスを作った後では両方のプロセスからオープンしている状態になっていますので、それぞれで閉じ(shm_unlink)なければいけません。 通常はmallocで確保したメモリも共有メモリもプロセス終了(あるいはexec)時には自動的に開放される(あるいは閉じられる)ので気にすることは少ないと思いますけど。 # forkしたまま長くexecしないプログラムって少ないのではないかな

dijtoy
質問者

お礼

お礼が本当に遅くなって申し訳ございません。 また、あんぽんたんな質問をしたのに関わらず ご回答ありがとうございます。 UNIX系が初心者でしたのでforkした後にexecする事すら分かってませんでした。(する必要が無い場合もあるとは思いますが) ご回答の内容を元に、プロセスの挙動をいろいろ調べて 必要な情報を知ることが出来ました。 ありがとうございます。

関連するQ&A