5.15 関数のパラメータ受け渡しに伴うオーバーヘッドを最小化するための方法
関数のパラメータ受け渡しに伴うオーバーヘッドは、いくつかの方法で最小限にできます。
以下に例を示します。
-
関数の各引数のサイズが 1 ワード以下の場合、引数を 4 個以下にします。C++ では、通常は暗黙の this
ポインタ引数が
R0
で渡されるため、非スタティックメンバ関数に使用する引数を 3 個以下にします。
-
関数で 5 個以上の引数が必要な場合は、スタックした引数の受け渡しコストをカバーできるように、その関数で相当な量の処理を行うようにして下さい。
-
関連性のある引数を 1 つの構造体にまとめ、その構造体を指すポインタを関数呼び出しで受け渡します。こうすることにより、パラメータ数を減らし、読みやすさを高めることができます。
-
long long
パラメータでは、偶数レジスタインデクスで整列する必要のある引数ワードが 2 個使用されるため、これらのパラメータの数を最小限にします。
-
ソフトウェア浮動小数点を使用する場合は、
double
パラメータの数を最小限にします。
-
可変数のパラメータを持つ関数を使用しないようにします。可変数の引数を使用する関数では、事実上すべての引数がスタックで受け渡されます。