Почему адрес переменной остается прежним в системном вызове fork() после его изменения

Рассмотрим следующий фрагмент кода.

if (fork() == 0)
{
     a = a + 5;
     printf("%d, %d \n", a, &a);
}
else
{
     a = a - 5;
     printf ("%d, %d \n", a,& a);
}

Насколько мне известно, при выполнении fork() виртуальное адресное пространство родителя копируется в дочерний элемент, и дочерний и родительский разделяют одни и те же физические страницы до тех пор, пока один из них не попытается изменить. В тот момент, когда один из дочерних и родительских элементов изменяет переменную, физическая страница родителя копируется на другую страницу для дочернего элемента, а физические страницы остаются закрытыми. Итак, здесь значение «а» отличается в дочернем и родительском. Но когда дело доходит до адресов «a» в дочернем и родительском, результат одинаков. Я не могу понять, почему адрес остается прежним, даже если физические страницы разные.

5
задан Green goblin 18 June 2012 в 17:07
поделиться