1. ホーム
  2. c++

[解決済み】C++のインライン関数の利点は?

2022-04-04 04:47:12

質問

C++でインライン関数を使用するメリット/デメリットは何ですか?コンパイラが出力するコードのパフォーマンスを上げるだけというのはわかりますが、最適化されたコンパイラ、高速なCPU、巨大なメモリなどを持つ今日(メモリが乏しく、100KBのメモリにすべてを収めなければならなかった1980<のようではない)、本当にどんなメリットがあるのでしょう。

どうすれば解決するの?

インライン関数は、パラメータやリターンアドレスなどのスタックへのプッシュ・ポップが不要なため、高速に動作します。しかし、バイナリが若干大きくなります。

大きな違いがあるのでしょうか? 最近のハードウェアでは、ほとんどの場合、それほど顕著な違いはありません。 しかし、人によっては十分な違いをもたらすことができます。

インラインのマークを付けたからといって、それがインラインであることが保証されるわけではありません。 あくまでコンパイラーへの提案です。 仮想関数があったり、再帰性があったりすると、それが不可能な場合もあります。 また、コンパイラがインライン化を選択しないこともあります。

このような状況では、検出可能な違いが出てくるのは目に見えています。

inline int aplusb_pow2(int a, int b) {
  return (a + b)*(a + b) ;
}

for(int a = 0; a < 900000; ++a)
    for(int b = 0; b < 900000; ++b)
        aplusb_pow2(a, b);