マルチスレッドのプログラミング

スレッドへのスタック空間の割り当て

通常、スレッドにスタック空間を割り当てる必要はありません。システムは、各スレッドのスタックに対して、1M バイト (32 ビットシステムの場合) または 2M バイト (64 ビットシステムの場合) の仮想メモリーを割り当てます。スワップ空間は予約されません。システムは、mmap()MAP_NORESERVE オプションを使って割り当てを行います。

システムによって生成されたスレッドスタックは、それぞれレッドゾーンを持っています。システムはレッドゾーンとして、スタックオーバーフローを捕捉するためのページをスタックのオーバーフローの最後に付加します。このページは無効で、アクセスされるとメモリーフォルトになります。レッドゾーンは、自動的に割り当てられるすべてのスタックに付加されます。これは、そのサイズがアプリケーションで指定されたかデフォルトのサイズであるかに関係なく行われます。


注 –

実行時のスタック要件はライブラリ呼び出しや動的リンクによって異なります。したがって、指定したスタックがライブラリの呼び出しと動的リンクに必要な実行時要件を確実に満たすようにしなければなりません。


スタックとスタックサイズの一方または両方を指定するのが適正である場合はまれです。専門家であっても、適切なサイズを指定したかどうかを判断するのは困難です。ABI 準拠のプログラムでも、スタックサイズを静的に判定することはできません。スタックサイズは、プログラムが実行される、それぞれの実行環境に左右されます。