スタック領域とは、プロセッサのスタックが利用するメインメモリのメモリ領域のことです。
スタック領域の開始位置は、スタックポインタの初期値です。
PUSH命令を利用すると、スタックポインタの値が変化し、使用可能なスタック領域が減っていきます。
逆に、POP命令を利用すると、使用可能なスタック領域が増えていきます。
マルチタスクOSでは、プロセスごとにスタック領域が割り当てられます。
この場合、スタック領域の割り当ては、OSが自動で行います。
その際、スタック領域のサイズは、通常、プロセスによらず固定値です。
スタック領域のサイズは、OSやコンパイラの設定により、プロセスごとに変えることもできます。
OSを使わない場合、プロセスは一つとなるため、スタック領域も一つになります。
この場合、スタック領域の割り当ては、コンパイラが自動で行います。
スタック領域のサイズは、コンパイラの設定で変えることができます。
スタック領域の使用量は、通常、実際にプログラムを実行してみないと分かりません。
よって、スタック領域のサイズは、一般的に、余裕を持ったサイズに設定されています。
メインメモリのサイズに余裕がない場合は、スタック領域の使用量を調べて、スタック領域のサイズを指定し、スタック領域のサイズを最小限にすることも可能です。
割り当てられたスタック領域を超えて、プロセッサのスタックを利用することをスタックオーバーフローと言います。
スタックオーバーフローすると、書き換えてはいけないメインメモリを書き換えることになるため、問題が生じます。
スタックオーバーフローする場合は、ソースコードを見直して、スタック領域の使用量を減らすか、スタック領域のサイズを大きくします。