繁体   English   中英

在UNIX fork之后指向动态分配内存的指针会发生什么?

[英]what happens to pointers to dynamically allocated memory after a UNIX fork?

有人请说明fork()之后指针会发生什么。

据我了解,指向堆栈上任何内容或静态分配的指针都与堆栈/数据段寄存器相关,因此在fork期间准确复制它们是可以的。

但是,如果我在分叉前使用malloc()会发生什么? 例如:

void* p = malloc(64);
// put something in *p;
fork();

// what happens to p and the memory i allocated here?

我想到的可能性:

  1. * p被复制到堆的其他部分,p被更新以反映新复制的位置。

  2. p仍然指向原始。 如果有孩子自由奔跑(p); 父母可能无法访问它。

  3. p仍指向原始数据,但子进程无权访问/管理内存。

哪些,如果有的话,是正确的?

分叉时,子进程成为其父进程的副本 这包括任何动态分配的内存。 所以内存将被复制。 指针地址将保持不变(复制不会更改数据,还记得?),这是通过虚拟寻址实现的。 不要忘记在父进程和子进程中都可以free调用。

该值也被复制,因为fork复制代码,全局,堆和堆栈。

资料来源: http//web.eecs.utk.edu/~huangj/cs360/360/notes/Fork/lecture.html

malloced内存来自 ,这对于一组内存页来说只是一个奇特的词。 因为fork()复制了进程的所有内存页面而不管教科书中是否有任何花哨的命名,fork()返回的指针在子进程中运行得很好:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM