父级和子级具有相同的变量地址,但值不同

时间:2014-06-17 10:15:08

标签: c unix process

我知道父母和孩子有不同的地址空间但是当我运行下面的代码并检查父和子中的变量的地址时,它就变得相同了。好像两个变量名都是针对相同的内存位置,为什么没有子的值的变化反映在父级中。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{

    int turn = 0;
    if (fork() == 0)
    {
            turn = 10;
            printf("Child Turn: %d\n", turn);
            printf("Child Address of turn: %p\n", &turn);
            exit(0);
    }
    else
    {
            sleep(2);
            printf("Parent Turn: %d\n", turn);
            printf("Parent Address of turn: %p\n", &turn);
    }

return 0;
}

输出是:

儿童转身:10

转弯的子地址:0xbfc1830c

父母转:0

转弯的父地址:0xbfc1830c

如果两者都有相同的地址,为什么值不同。或者类似于例如

如果我们有两个方框,一个名为父母,另一个为子女。

两个方框都包含数字1到10。

所以在儿童邮箱中我们也说了5号,

在父框中我们也有5号。

数字相同,但在不同的方框中。

类似于上面的情况,地址是相同的0xbfc1830c,但是在不同的进程地址空间中。是这样吗。

1 个答案:

答案 0 :(得分:2)

这是因为virtual memory。这两个进程在同一个虚拟地址上都有变量,但当然不在同一个物理地址上。