C-使用叉的变量的内存位置



我很难理解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

相关内容

  • 没有找到相关文章

最新更新