3

インラインとしてマークされた関数をコンパイラが必ずしも作成しないのはいつですか?

4

3 に答える 3

2

関数へのポインターを取得する場合、関数をインライン化できないことは明らかです。ポインターを渡し、(おそらく後で) ポインターを介して関数を呼び出すことにした場合、コンパイラーは関数のインライン化されていないバージョンを生成する必要があります。もちろん、関数が直接呼び出された場合でも、コンパイラはそれをインライン展開する可能性があります。また、コンパイラは関数をインライン化しなくてもかまいません。

于 2013-04-15T16:58:21.167 に答える
2

キーワードを使用するinlineことは、使用されている場所でインライン展開することを提案するコンパイラへのヒントにすぎません。ただし、コンパイラは、L1 キャッシュや L2 キャッシュ、分岐予測パイプラインなどの高度な CPU 機能がパフォーマンスに与える影響を予測する上で、これまでよりもはるかにスマートです。関数をインライン化するとコードが遅くなったり、容認できないほど大きくなったりするとコンパイラが判断した場合は、インライン化しません。または、コールバックに関数ポインターを使用する他のコードや、動的/静的コード ライブラリのように関数を外部にエクスポートするなど、構文上の依存関係のために単純にできない場合。

もう少し説明が必要な場合は、こちらを参照してください。

于 2013-04-15T16:58:39.923 に答える