サブルーチン化について(3)

プログラムがコンパイルされると関数は機械語の命令コードに変換されます。
それらは実行時にメモリ上の命令コード領域とよばれる領域に格納され、関数を実行する際は命令コードを読み取るためにそこを移動(ジャンプ)していくことになります。
命令コードは関数ごとにまとめられているので、新たな関数が呼ばれるタイミングでその関数に相当する命令コードの先頭にジャンプすることになります。
関数を実行している間は命令コードを順番に一つずつ実行していくのでジャンプは発生しません。
つまり関数が呼ばれる回数が増えると、それに応じてメモリジャンプの回数が増えていくことになります。
一度のメモリジャンプにかかる時間は極めて短いのですが、ゲームの規模が拡大していくとメインループ一回につき呼ばれる関数の総数は飛躍的に増えていくので、メモリジャンプは無視できなくなります。
これはサブルーチン化のデメリットです。
対応策の一つとして、以下はC++の例ですが、次のようなコーディングをすることがよくあります。

inline int GetValue() const { return m_value; }

これは関数をインライン展開することでメモリジャンプの回数を減らそうという考えによるものです。
こうすることで可読性を損ねずに実行速度の向上が期待できるわけです。
関数をサブルーチン化する際、その関数がシンプルでかつ呼ばれる頻度が高いものであれば、サブルーチンをインライン展開やマクロ化することを考慮した方がよいかもしれません。
そのためには自分が作っている関数がどれくらいの頻度で呼ばれる想定のものなのかを常に意識しておく必要があります。