在单独的地址空间中映射此
我很难理解programe的输出。使用fork()
后,变量inmem
的内存位置显示相同。有人可以解释一下!谢谢
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int inmem = 9;
int pid = fork();
if(!pid)
{
printf("child inmem %d %pn", inmem,&inmem);
inmem = 8;
printf("child inmem %d %pn", inmem, &inmem);
}
else
{
printf("parent inmem %d %pn", inmem, &inmem);
inmem = 5;
printf("parent inmem %d %pn", inmem, &inmem);
}
return 0
}
输出 -
parent inmem 9 0x7ffff0acdfc8
parent inmem 5 0x7ffff0acdfc8
child inmem 9 0x7ffff0acdfc8
child inmem 8 0x7ffff0acdfc8
fork
在您的代码和地址方面创建了过程的精确副本。这已经是必要的,因为叉子之后的代码以与以前相同的方式执行,并且对变量具有相同的ACESS。但是,一旦过程分叉,它们将不再同步,因此分配新的内存可能会产生不同的地址。
fork()
儿童将具有separate address space
。此地址空间是指virtual address space
。因此,父母和孩子的地址与虚拟地址相同。
OS将使用不同的physical address
virtual address