GCCインラインC ++は 'inline'キーワードなしで機能しますか?
-
06-07-2019 - |
質問
GCCは、C ++コードのコンパイル時に、 inline
キーワードでマークされていないインライン関数を選択することで速度を最適化しようとしますか?
解決
はい。コンパイラーは、それが良い考えだと思うときはいつでも関数を自由にインライン化できます。 GCCも同様です。
-O2最適化レベルでは、コンパイラーが実行する価値があると判断した場合(ヒューリスティックが使用されます)、インライン化が行われます。 -O3では、コードのサイズが増加するかどうかに関係なく、コンパイラが実行する価値があると判断するたびに実行されます。さらに、最適化のすべてのレベル(つまり、有効化された最適化)では、一度だけ呼び出される静的関数がインライン化されます。
他のヒント
はい。特に、高レベルの最適化を有効にしている場合。
これを無効にするためにコンパイラに提供できるフラグがあります:-fno-inline-functions。
「-finline-functions」または「-O3」を使用すると、関数がインライン化されます。 '-finline_limit = N'を使用して、インライン化の程度を調整することもできます。
" -O3 このオプションは、関数のインライン化など"
のより高価な最適化を有効にしますはい、できますが、非 static
非 inline
関数の非インライン関数本体も生成します。これは他の翻訳からの呼び出しに必要なためです単位。
inline
関数の場合、関数が特定の翻訳単位で使用されている場合、関数本体の提供に失敗するとエラーになります。これは問題になりません。
所属していません StackOverflow