次のコードスニペットについて考えてみます。
if (fork() == 0)
{
a = a + 5;
printf("%d, %d \n", a, &a);
}
else
{
a = a - 5;
printf ("%d, %d \n", a,& a);
}
AFAIK、fork()が作成されると、親の仮想アドレススペースが子にコピーされ、子と親のどちらかが変更を試みるまで、子と親の両方が同じ物理ページを共有します。子と親の1つが変数を変更すると、親の物理ページが子の別のページにコピーされ、物理ページは非公開のままになります。したがって、ここで「a」の値は子と親で異なります。ただし、子と親の「a」のアドレスについては、出力は同じです。物理的なページが異なっていても、アドレスが同じままである理由がわかりません。