在UNIX fork之后,指向动态分配内存的指针会发生什么?
发布时间:2020-12-15 18:23:38 所属栏目:安全 来源:网络整理
导读:有人请说明fork()之后指针会发生什么. 据我所知,指向堆栈上任何东西或静态分配的指针都与堆栈/数据段寄存器相关,因此在fork期间准确复制它们是可以的. 但是,如果我在分叉前使用malloc()会发生什么?例如: void* p = malloc(64);// put something in *p;fork
有人请说明fork()之后指针会发生什么.
据我所知,指向堆栈上任何东西或静态分配的指针都与堆栈/数据段寄存器相关,因此在fork期间准确复制它们是可以的. 但是,如果我在分叉前使用malloc()会发生什么?例如: void* p = malloc(64); // put something in *p; fork(); // what happens to p and the memory i allocated here? 我想到的可能性: > * p被复制到堆的其他部分,p被更新以反映新复制的位置. 哪些,如果有的话,是正确的?
分叉时,子进程成为其父进程的副本.这包括任何动态分配的内存.所以内存将被复制.指针地址将保持不变(复制不会更改数据,还记得?),这是由
virtual addressing实现的.不要忘记在父进程和子进程中都可以自由调用.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |