命令セット・アセンブリ
関数の中でフレームポインタ(RISC-Vではs0/fp)を使う利点として正しいものはどれか。
- Aレジスタを1本余分に使わずに済むので、性能が必ず上がる
- B関数の途中でspが動いても、局所変数や引数を固定の距離で指定でき、デバッガも呼び出しの連なりをたどりやすい
- Cスタックの領域が自動で大きくなり、あふれなくなる
答えと解説を見る
正解:B. 関数の途中でspが動いても、局所変数や引数を固定の距離で指定でき、デバッガも呼び出しの連なりをたどりやすい
フレームポインタは、関数に入った時点のスタックの位置を指したまま動かないレジスタです。可変長の配列などでspが途中で変わっても、局所変数を「fpから何バイト」で指定できます。また、各フレームに前のfpを保存しておけば、たどることで呼び出しの連なり(バックトレース)を得られます。ただしレジスタを1本占めるので、最適化では省略されることも多いです。
- A. 逆に1本のレジスタを専用に使うことになります。
- B. 正しい。フレームの基準点として働きます。
- C. スタックのあふれを防ぐ働きはありません。