Level 3:関数 3.8 インライン関数

※資料は自著より引用


■3.8 インライン関数

・スタック

 スタックの解説についてはこちらを参照のこと。


・システムスタック

前期で学習したように,現代のプログラムのほとんどすべてで,関数・メソッド・サブルーチン・プロシージャ
などと呼ばれるものを呼び出して利用する際に,メモリの一部をスタックとして使っている。これを一般に
システムスタックと呼ぶ。

 ●関数の呼び出し連鎖の仕組み
 ●メモリ上での関数呼び出しの様子
 ●システムスタックの変化の様子

について,下図に示す。







上記の様に,関数を呼び出す際に形成されるスタック上の枠組み(戻りアドレス領域,仮引数領域,返値領域,局所変数領域)
スタックフレームと呼ぶ。

つまり,関数を呼び出すときには
 (1)関数を呼び出す準備としてスタックに戻り番地をプッシュし,仮引数領域と返値領域を確保(SPの移動)してスタックフレームを形成する
 (2)スタックフレーム上仮引数領域に実引数値をコピーする(仮引数の実引数による初期化)
 (3)関数本来の処理を実行する
 (4)返値があれば返値をスタックフレーム上の返値領域に代入する
 (5)スタックフレームを解放し(SPの移動),戻り番地をポップして関数の呼び出し直後に戻る
という具合に動作しており,本来の処理以外にも(1),(2),(4)(5)のような準備・後始末的処理を実行している。
この関数を呼び出す際の準備・後始末的処理,およびその実行に掛かる時間をオーバーヘッドと呼ぶ。


●インライン関数