gpt4 book ai didi

c - 使用fork时内存是如何映射的?

转载 作者:IT王子 更新时间:2023-10-29 01:07:54 25 4
gpt4 key购买 nike

我是“fork()”的新手,我到处都读到,当调用 fork() 时,当前(调用)进程的精确副本已启动。现在当我运行以下代码时,应该有两个不同的进程,将两个不同的内存位置分配给它们的变量和函数。

#include<stdio.h>
int i=10;
int pid;
int main(){
if((pid=fork())==0){
i++;//somewhere I read that separate memory space for child is created when write is needed
printf("parent address= %p\n",&i);// this should return the address from parent's memory space
}else{
i++;
i++;
printf("child address= %p\n",&i);// this should return the address of child's memory space
}
wait(0);
return(0);
}
Why The output looks like:: child address::804a01c parent address::804a01c

为什么 parent 和 child 的地址都一样?

最佳答案

having two different memory locations assigned to their vars and functions.

没有; Linux 实现 virtual memory ,这意味着每个进程都有自己完整的地址空间。结果,在 fork 之后,两个进程看到它们的内存对象副本的相同地址。

(顺便说一句:VM 还导致代码在物理内存中的进程之间共享,并且所有数据只会是 copied-on-write。)

关于c - 使用fork时内存是如何映射的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com