有人请澄清 fork() 之后指针会发生什么。
据我了解,指向堆栈上或静态分配的任何内容的指针都是相对于堆栈/数据段寄存器的,因此在分叉期间准确复制它们是可以的。
但是,如果我在 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仍然指向原始数据,但子进程没有访问/管理内存的权限。
如果有的话,哪一个是正确的?
当分叉时,子进程变成a copy它的父级。这包括任何动态分配的内存。所以内存会被复制。指针地址将保持不变(复制不会更改数据,还记得吗?),这是通过以下方式实现的虚拟寻址 http://en.wikipedia.org/wiki/Virtual_address_space。别忘了打电话free
在父进程和子进程中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)