Адрес является «тем же», поскольку каждый процесс имеет свое собственное виртуальное адресное пространство, и переменная, как правило, загружается в одно и то же место. Обратите внимание, что это не физический адрес в памяти. Также обратите внимание, что существуют схемы, которые намеренно рандомизируют местоположение, в которое загружается процесс, чтобы сделать его более трудным для атаки / взлома процесса. В этом случае адрес будет другим.
ой код
int main()
{
pid_t pid;
int y = 3;
if ( (pid = fork()) <0 )
return -1;;
if( pid == 0 ) /* child */
{
printf(" before: %d %p\n", y, &y );
y *= 10;
printf("after: %d %p\n", y, &y );
}
else /* father */
{
sleep(1);
printf("father: %d %p\n" , y , &y );
}
return 0;
}
Вывод программы выглядит следующим образом:
before: 3 ffbff440
after: 30 ffbff440
father: 3 ffbff440
Мой вопрос: почему адрес переменной потомка и родителя одинаков, но значение отличается?