誰かがfork()の後に何が起こるかを明確にしてください。UNIX fork後に動的に割り当てられたメモリへのポインタはどうなりますか?
私が理解しているように、スタック上のものや静的に割り当てられたものへのポインタは、スタック/データセグメントレジスタとの相対的なものです。
しかし、フォークする前にmalloc()を実行するとどうなりますか?私は考えてい
void* p = malloc(64);
// put something in *p;
fork();
// what happens to p and the memory i allocated here?
可能性:例えば
* pはヒープの他の部分にコピーされ、pは、新たにコピーした場所を反映するように更新されます。
pはまだオリジナルを指します。子供が自由に走った場合(p);親がアクセスできない場合があります。
pはまだ元のデータを指していますが、子プロセスはメモリにアクセス/管理する権限を持っていません。
これらのうちのどれが正しいかは、
ポインタは同じメモリアドレスを指しています。更新されるのは仮想マッピングです。ポインタ - >仮想アドレス - >実際の物理アドレス。 – jweyrich
[Cのfork()呼び出し後にポインタを参照する]の重複が可能です。(http://stackoverflow.com/questions/4393933/referencing-pointers-after-a-fork-call-in-c) –
[ fork()は、Linuxのmalloc()から動的に割り当てられたメモリをどう扱うのですか?](http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc -i) – IanNorton