ここに2つのコードサンプルがあります
#include<stdio.h>
int main()
{
int i = 0;
i++;
fork();
printf("i - %d, pid - %d, addr -%p\n",i,getpid(),&i);
return 0;
}
user@Ubuntu ~/Arena/c $ ./a
i - 1, pid - 6765, addr -0x7fffd892950c
i - 1, pid - 6766, addr -0x7fffd892950c
私の2番目のプログラムは
#include<stdio.h>
int main()
{
int i = 0;
i++;
printf("i - %d, pid - %d, addr -%p\n",i,getpid(),&i);
fork();
return 0;
}
user@Ubuntu ~/Arena/c $ ./b
i - 1, pid - 6772, addr -0x7fff39120f2c
私の知る限り、フォークは親プログラムの完全なコピーを上から下に作成して実行する必要があります。その場合、呼び出しの位置がそれほどfork()
大きな違いを生むのはなぜですか? printf
2番目のプログラムで省略されている理由を誰かが説明できますか?