考虑以下代码片段。
if (fork() == 0)
{
a = a + 5;
printf("%d, %d \n", a, &a);
}
else
{
a = a - 5;
printf ("%d, %d \n", a,& a);
}
AFAIK,当创建 fork() 时,父级的虚拟地址空间被复制到子级,并且子级和父级共享相同的物理页面,直到其中一个尝试修改。当孩子和父母中的一个修改变量时,父母的物理页面被复制到另一个孩子的页面并且物理页面保持私有。所以,这里的“a”值在孩子和父母中是不同的。但是当涉及到孩子和父母中“a”的地址时,输出是相同的。即使物理页面不同,我也无法弄清楚为什么地址保持不变。