関数のインライン展開に関するコンパイラによる決定

関数のインライン展開が有効になっている場合、コンパイラは複雑なデシジョンツリーを使用して、関数をインライン展開するかどうかを決定します。

以下の簡略化されたアルゴリズムが使用されます。

  1. 関数が __forceinline で修飾されている場合は、関数をインライン展開することが可能な場合に、関数がインライン展開されます。

  2. 関数が __inline で修飾され、オプション --forceinline が選択されている場合は、関数をインライン展開することが可能な場合に、関数がインライン展開されます。

    関数が __inline で修飾され、オプション --forceinline が選択されていない場合は、関数をインライン展開することが実際的な場合に、関数がインライン展開されます。

  3. 最適化レベルが -O2 以上であるか、--autoinline が指定されている場合は、ユーザから関数のインライン展開が明示的に指定されなかった場合でも、関数をインライン展開することが実際的な場合に、関数が自動的にインライン展開されます。

関数をインライン展開することが実際的であるかどうかをコンパイラが判断する際は、以下に示す他の基準も考慮に入れられます。

コンパイラは、関数が __forceinline によって修飾されている場合でも、その関数をインライン展開しないように決定することがあります。以下の一般規則が適用されます。

__forceinline が使用されている場合でも、再帰関数は一度しかインライン展開できません。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711