ローカル変数

ローカル変数とは、一部のスコープからしかアクセスできない変数*のことです。

一番外側ではないスコープで変数の宣言を行うと、その変数*は、そのスコープだけで利用できるローカル変数となります。代表的なローカル変数は、サブルーチン内で宣言された変数*です。

なお、ローカル変数は、サブルーチンが終了したりなど、スコープから抜けると使えなくなります。これは、ローカル変数用に確保されていたメインメモリが開放されるためです。

また、配列やポインタも変数*の一種であり、単にローカル変数というとき、配列やポインタも含みます。

ローカル変数とスタックオーバーフロー

ローカル変数は、スタック領域に確保されます。

なので、要素数が多い配列のローカル変数を利用する場合は、スタックオーバーフローに注意する必要があります。

ローカル変数の仕組み(ハードウェアレベル)

ローカル変数は、ハードウェアレベルでは、以下の仕組みで実現されています。

・ローカル変数の宣言を行うと、PUSH命令でコールスタックに0がPushされ、ローカル変数用のメインメモリがスタック領域に確保されます。

・ローカル変数の宣言と変数の初期化を同時に行う場合は、PUSH命令でコールスタックに初期化の値がPushされ、ローカル変数用のメインメモリがスタック領域に確保されます。

・ローカル変数のメモリアドレスは、ベースポインタを基準とした相対アドレスで表現できます。

・サブルーチンが終了するなど、ローカル変数が宣言されたスコープから抜ける際、POP命令でローカル変数のメモリアドレスは解放されるため、そのスコープのローカル変数は使えなくなります。