スタックポインタとサブルーチン呼出しとは?すたっくぽいんたとさぶるーちんよびだし
スタックポインタとサブルーチン呼出しとは、呼出しの深さが実行時に決まっても破綻しないよう、戻り番地と退避レジスタ、局所変数を後入れ先出しの領域に積む方式と、その積み上げ位置を指す専用レジスタ。再帰と割込みの多重化はこの仕組みの上に成り立つ。領域は実行前に確保する固定量なので、1スレッドに割く大きさは同時に立てられるスレッド数と引き換えになる。
最終更新:2026-10-06
システムアーキテクトを最短で暗記・合格する →背景
戻り番地を固定の場所に置く方式では、呼出しの入れ子も再帰も成立しなかった。後入れ先出しの領域を1本用意し、その位置をレジスタで指すようにしたことで、深さが実行時に決まる呼出しを一様に扱えるようになった。設計上の意味は、この領域が実行前に確保する固定量だという点にある——深い再帰や割込みの多重度を見誤ると、あふれたときに隣の領域を静かに壊し、原因の特定に時間を取られる。並行処理の方式を選ぶときの、目に見えない上限でもある。
具体例
CALL命令はプログラムカウンタの値をスタックへ積んでスタックポインタを進め、RETURN命令が取り出してPCへ戻す。Linuxのスレッドは既定で8MBのスタックを確保するため、1万スレッドを立てる設計はそれだけでアドレス空間を圧迫する。Goのゴルーチンが数KBから始めて必要に応じて伸ばす作りなのは、この制約を避けるための選択である。
試験での引っ掛け
プロセッサのレジスタの話と、データ構造としてのスタックの話は階層が違うので混ぜない。伸びる向きも上位アドレスから下位へという実装が多く、「積むとアドレスが増える」と決めつけると計算問題を落とす。ヒープとの取り違えも定番で、局所変数と戻り番地はスタック、動的に確保した領域はヒープに置かれる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。