Level 3:関数 3.8 インライン関数 |
※資料は自著より引用
■3.8 インライン関数
・スタック
スタックの解説についてはこちらを参照のこと。
・システムスタック
前期で学習したように,現代のプログラムのほとんどすべてで,関数・メソッド・サブルーチン・プロシージャ
などと呼ばれるものを呼び出して利用する際に,メモリの一部をスタックとして使っている。これを一般に
システムスタックと呼ぶ。
●関数の呼び出し連鎖の仕組み
●メモリ上での関数呼び出しの様子
●システムスタックの変化の様子
について,下図に示す。
上記の様に,関数を呼び出す際に形成されるスタック上の枠組み(戻りアドレス領域,仮引数領域,返値領域,局所変数領域)
をスタックフレームと呼ぶ。
つまり,関数を呼び出すときには
(1)関数を呼び出す準備としてスタックに戻り番地をプッシュし,仮引数領域と返値領域を確保(SPの移動)してスタックフレームを形成する
(2)スタックフレーム上仮引数領域に実引数値をコピーする(仮引数の実引数による初期化)
(3)関数本来の処理を実行する
(4)返値があれば返値をスタックフレーム上の返値領域に代入する
(5)スタックフレームを解放し(SPの移動),戻り番地をポップして関数の呼び出し直後に戻る
という具合に動作しており,本来の処理以外にも(1),(2),(4)(5)のような準備・後始末的処理を実行している。
この関数を呼び出す際の準備・後始末的処理,およびその実行に掛かる時間をオーバーヘッドと呼ぶ。
●インライン関数