有人请说明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仍指向原始数据,但子进程无权访问/管理内存.
哪些,如果有的话,是正确的?
分叉时,子进程成为其父进程的副本.这包括任何动态分配的内存.所以内存将被复制.指针地址将保持不变(复制不会更改数据,还记得?),这是由
virtual addressing实现的.不要忘记在父进程和子进程中都可以自由调用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。