2012-04-08 18 views
1

Iは、コンパイラのインラインマニュアルインラインより優れていると友人に言われましたが、彼はなぜ私を説明できませんでした。インラインキーワードを手動で実行できる場合(同じコードを何度も繰り返し書くことを除いて)、インラインキーワードを使用する利点は何ですか?コンパイラはインラインよりもインラインで優れていますか?

答えて

1

Inlineは、プリプロセッサマクロとはかなり異なる、コンパイラによって制御されるコピー/ペーストのように機能します。マクロは強制的にインライン展開され、すべての名前空間とコードを汚染し、容易にデバッグすることができず、コンパイラが非効率的であると判断したとしても実行されます。

inlineという名前を付けると、関数定義をヘッダファイルに入れることができます(リンカが不平等にならずに、複数のコンパイル単位に含めることができます)。あなたにそれをインラインになるという保証を与えるものではありませんinline何かをマーキング

。これはコンパイラにとっての単なる提案です。仮想関数がある場合や再帰がある場合など、時には不可能です。そして時々、コンパイラはそれを使用しないことを選択します。

+0

マクロをコンパイラが非効率的であるとみなす例をいくつか挙げることができます(最初の段落で説明したように)。 –

+0

マクロはコンパイルが発生する前に、それは、ソースは、マクロあたりのように変更されており、その後、コンパイル済みの「インライン化」されています。 –

+0

インラインコードが大きくなると、ページングが発生し、最適化がコンパイラーから拒否される可能性があります。 – IndieProgrammer

1

インライン関数は、コンパイラがそれを処理する場合、それはあなたがターゲットハードウェア上でより多くの知識を持っているがあれば、これらのパラメータを使用して決めることができます...キャッシュされたメモリ内に収まるように、あなたの関数があまりにも頻繁に呼び出されたときに有用と十分に小さいです

+0

だから、機能があまりにもfrequntly&使用されていない場合は、非常に大規模な手動インラインではありませんコンパイラのインラインに相当しているのですか? –

+0

マニュアルインライン化と自動インライン化は唯一の違いは、コンパイラはあなたのためにそれを行うと、あなたに適した機能のすべてをチェックすることができている、またはあなたは、あなたが何をしているかを知っていれば、自分でそれを行うとインラインにコンパイラに伝えることができ、性能manner..theに同じですいくつかの重要かつ適切な機能。 –

関連する問題