使用fork的变量的内存位置

时间:2014-01-22 11:17:36

标签: c linux memory-management fork ambiguous

我很难理解程序的输出。使用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

2 个答案:

答案 0 :(得分:2)

fork会针对您的代码和地址创建流程的精确副本。这已经是必要的,因为fork之后的代码执行方式与之前相同,并且对变量具有相同的访问权限。但是,一旦进程被分叉,它们就不再被同步,因此分配新内存可能会产生不同的地址。

答案 1 :(得分:1)

fork()孩子将separate address space后。此地址空间指的是virtual address space。因此父母和孩子将拥有相同的地址即虚拟地址。

操作系统会将此virtual address映射到具有不同physical address

的单独地址空间中