8

私はそれを研究しました

インライン指定子は、関数のコードを一度配置してから通常の関数呼び出しメカニズムを介して呼び出すのではなく、コード[...]をインラインで生成しようとする必要があるというコンパイラーへのヒントです。

質問:

  1. GCCコンパイラの最適化がオフになっている場合、インライン指定子は無視されますか?
  2. インライン関数が再帰的に呼び出される場合、通常の関数呼び出しメカニズムに従うまで、どのコンパイラオプションが「インライン化の深さ」を決定しますか?
  3. インライン関数がforループ内で呼び出された場合、同じ「インライン化の深さ」が画像に現れますか?
4

2 に答える 2

7

GCCコンパイラの最適化がオフになっている場合、インライン指定子は無視されますか?

はい、GCCで最適化がオフになっている場合、関数はインライン化されません。これは-fno-inline、コンパイル中にフラグを使用するのと同じです。このリンクを参照してください

-fno-inline

Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

インライン関数が再帰的に呼び出される場合、通常の関数呼び出しメカニズムに従うまで、どのコンパイラオプションが「インライン化の深さ」を決定しますか?

オプションmax-inline-recursive-depthmax-inline-recursive-depth-auto。デフォルトの深さは8です。

于 2012-06-24T06:51:07.767 に答える
2

-fno-inlineの他に、-fno-default-inlineを使用して、クラスのインライン関数を無効にする必要があります。これは、gdbを使用してこれらのインライン関数にステップインする場合に役立ちます。

于 2012-06-24T07:46:53.003 に答える