2

コードは APUE から取得しました。Ubuntu 12.04 で gcc を最適化せずに使用すると、本と同じ結果が得られます。

pid = 4122, glob = 7, var = 89.

gcc -O2 を使用すると、var は 88 になります。これは、gcc の最適化が vfork() で何かを行うためですか?

#include "apue.h"

int glob = 6;

int
main(void)
{
  int var;
  pid_t pid;
  var = 88;
  printf("before vfork\n");
  if ((pid = vfork()) < 0) {
    err_sys("vfork error");
  } else if ( pid ==0) {
    glob++;
    var++;
    _exit(0);
  }

  printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
  exit(0);
}
4

1 に答える 1