スタック領域

スタック領域とは、プロセッサのスタックが利用するメインメモリのメモリ領域のことです。

スタック領域の開始位置は、スタックポインタの初期値です。

PUSH命令を利用すると、スタックポインタの値が変化し、使用可能なスタック領域が減っていきます。

逆に、POP命令を利用すると、使用可能なスタック領域が増えていきます。

マルチタスクOSにおけるスタック領域

マルチタスクOSでは、プロセスごとにスタック領域が割り当てられます。

この場合、スタック領域の割り当ては、OSが自動で行います。

その際、スタック領域のサイズは、通常、プロセスによらず固定値です。

スタック領域のサイズは、OSやコンパイラの設定により、プロセスごとに変えることもできます。

OSを使わない場合のスタック領域

OSを使わない場合、プロセスは一つとなるため、スタック領域も一つになります。

この場合、スタック領域の割り当ては、コンパイラが自動で行います。

スタック領域のサイズは、コンパイラの設定で変えることができます。

スタック領域の使用量

スタック領域の使用量は、通常、実際にプログラムを実行してみないと分かりません。

よって、スタック領域のサイズは、一般的に、余裕を持ったサイズに設定されています。

メインメモリのサイズに余裕がない場合は、スタック領域の使用量を調べて、スタック領域のサイズを指定し、スタック領域のサイズを最小限にすることも可能です。

スタックオーバーフロー

割り当てられたスタック領域を超えて、プロセッサのスタックを利用することをスタックオーバーフローと言います。

スタックオーバーフローすると、書き換えてはいけないメインメモリを書き換えることになるため、問題が生じます。

スタックオーバーフローする場合は、ソースコードを見直して、スタック領域の使用量を減らすか、スタック領域のサイズを大きくします。