我知道父级和子级具有不同的地址空间,但是当我运行以下代码并检查父级和子级中变量的地址时,结果是相同的。好像两个变量名都用于相同的内存位置一样,为什么子项的值更改未反映在父项中。
#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,但在不同的进程地址空间中。是这样吗
这是因为虚拟内存。这两个进程各自在相同的虚拟地址上具有变量,但是当然不在同一物理地址上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句