10

これが私のコードです

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

私の質問は、子と親の変数のアドレスが同じなのに値が異なるのはなぜですか?

4

2 に答える 2

1

各プロセスには独自の仮想アドレス空間があり、変数は通常同じ場所にロードされるため、アドレスは「同じ」です。これはメモリ内の物理アドレスではないことに注意してください。また、プロセスの攻撃/ハッキングをより困難にするために、プロセスがロードされる場所を意図的にランダム化するスキームがあることにも注意してください。その場合、住所が異なります。

于 2011-08-31T07:10:58.643 に答える