加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux进程中父进程的地址空间与子进程的区别?

发布时间:2020-12-13 19:23:05 所属栏目:Linux 来源:网络整理
导读:我很困惑.我已经读过,当父进程创建子进程时, child获取其父级地址空间的副本.复制意味着什么? 如果我使用下面的代码,那么它会打印相同的变量a的地址 案例.即在儿童和父母的情况下.那么这里发生了什么? int main (){ pid_t pid; int *a = (int *)malloc(4);

我很困惑.我已经读过,当父进程创建子进程时,
child获取其父级地址空间的副本.复制意味着什么?
如果我使用下面的代码,那么它会打印相同的变量’a’的地址
案例.即在儿童和父母的情况下.那么这里发生了什么?


int main () { pid_t pid; int *a = (int *)malloc(4); printf ("heap pointer %pn",a); pid = fork(); if (pid < 0) { fprintf (stderr,"Fork Failed"); exit(-1); } else if (pid == 0) { printf ("Childn"); printf ("in child heap pointer %pn",a); } else {

wait (NULL); printf ("Child Completen"); printf ("in parent heap pointer %pn",a); exit(0); }

}

最佳答案
子项获取父项地址空间的精确副本,在许多情况下,父项地址空间可能与父地址空间的格式相同.我必须指出,每个人都有自己的虚拟地址空间用于它的内存,这样每个人可以在同一地址拥有相同的数据,但是在不同的地址空间中.此外,linux在创建子进程时使用copy on write.这意味着父和子将共享父地址空间,直到其中一个进行写入,此时内存将物理复制到子进程.这样可以在执行新进程时消除不需要的副本.由于您只是要使用新的可执行文件覆盖内存,为什么还要复制呢?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读