这是一个代码:

int i = 0;
pid_t pid;
puts("Hello, World!");
puts("");
pid = fork();
if (pid) {
    i = 42;
}
printf("%p\n", &i);
printf("%d\n", i);
puts("");
并输出
Hello, World!

0x7fffc2490278
42

0x7fffc2490278
0
程序打印您好,世界!一次,子进程不是从头开始,也不是重新定义变量。变量的地址相同。因此,它们是相同的。但是我更改了首先执行的父流程中的值,但对于子流程未更改。为什么?

最佳答案



地址在过程范围内。它们是虚拟地址。父进程中的地址0x7fffc2490278和子进程中的0x7fffc2490278是不同的物理地址。

关于c - fork 后的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31572782/

10-11 21:15