有人請澄清一下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) –
[Specific ,fork()如何處理從malloc()在Linux中動態分配內存?](http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc -i) – IanNorton