ところが、ただ単に実行位置を揃えただけではすぐエラーとなってしまいます。この原因はスタックの内容が親子で異なるためで、子プロセス側で実行位置だけを変更しても、その位置から実行するコードが親プロセスと同じ位置のスタックを読み込もうとしたとき、その値は未定義であり、エラーが起きるのも目に見えています。(スタックについての説明は別ページに設けました。) さらに、同じプログラムを最初から起動しても、同じ位置で止めたときのスタック位置は異なる場合があります。すなわち、プログラムを実行するときはいつも同じスタックアドレスで開始するとは限らない、ということです。 そこで、少々強引ですがスタックもメモリブロックであるため、自分でスタックを用意してしまいます。 スタック メモリブロックは、サイズが大きくなるのとアドレスを揃えるのを楽にするため、VirtualAlloc 関数で割り当てます。メモリブロックのサ
![Windows で Unix の fork をしたい - Programming Field](https://cdn-ak-scissors.b.st-hatena.com/image/square/dadfe8975d677388a90282ce327f2fefc02a1930/height=288;version=1;width=512/https%3A%2F%2Fwww.pg-fl.jp%2Fimage%2Fpf.png)