我很难理解程序的输出。使用fork()
后,变量inmem
的内存位置显示相同。
有人可以解释一下!
Thanku
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int inmem = 9;
int pid = fork();
if(!pid)
{
printf("child inmem %d %p\n", inmem,&inmem);
inmem = 8;
printf("child inmem %d %p\n", inmem, &inmem);
}
else
{
printf("parent inmem %d %p\n", inmem, &inmem);
inmem = 5;
printf("parent inmem %d %p\n", inmem, &inmem);
}
return 0
}
OUTPUT -
parent inmem 9 0x7ffff0acdfc8
parent inmem 5 0x7ffff0acdfc8
child inmem 9 0x7ffff0acdfc8
child inmem 8 0x7ffff0acdfc8
答案 0 :(得分:2)
fork
会针对您的代码和地址创建流程的精确副本。这已经是必要的,因为fork之后的代码执行方式与之前相同,并且对变量具有相同的访问权限。但是,一旦进程被分叉,它们就不再被同步,因此分配新内存可能会产生不同的地址。
答案 1 :(得分:1)
fork()
孩子将separate address space
后。此地址空间指的是virtual address space
。因此父母和孩子将拥有相同的地址即虚拟地址。
操作系统会将此virtual address
映射到具有不同physical address