タグ付けされた質問 「inline-functions」

14
C ++のインライン関数の利点?
C ++でインライン関数を使用する利点と欠点は何ですか?コンパイラーが出力するコードのパフォーマンスを向上させるだけであることがわかりますが、今日の最適化されたコンパイラー、高速CPU、巨大なメモリーなど(メモリーが不足していて、すべてが100KBのメモリーに収まらなければならなかった1980年とは異なります)彼らが今日持っている利点は何ですか?

5
Kotlinでインライン関数を使用する場合
インライン関数を使用するとパフォーマンスが向上し、生成されたコードが大きくなる可能性があることはわかっていますが、いつ使用するのが正しいかわかりません。 lock(l) { foo() } パラメータの関数オブジェクトを作成して呼び出しを生成する代わりに、コンパイラは次のコードを発行できます。(出典) l.lock() try { foo() } finally { l.unlock() } しかし、非インライン関数用にkotlinによって作成された関数オブジェクトがないことがわかりました。どうして? /**non-inline function**/ fun lock(lock: Lock, block: () -> Unit) { lock.lock(); try { block(); } finally { lock.unlock(); } }

6
extern inlineは何をしますか?
私inlineはそれ自体がコンパイラへの提案であり、その裁量で関数をインライン化することもしないこともあり、リンク可能なオブジェクトコードも生成することを理解しています。 私static inlineは同じことをすると思いますが(インライン化してもしなくても)、インライン化するとリンク可能なオブジェクトコードを生成しません(他のモジュールがリンクできないため)。 写真のどこにextern inline収まるのですか? プリプロセッサマクロをインライン関数で置き換え、この関数をインライン化する必要があるとします(たとえば、呼び出し元に対して解決する必要がある__FILE__と__LINE__マクロを使用するため、この呼び出された関数ではないため)。つまり、関数がインライン化されない場合に備えて、コンパイラーまたはリンカーのエラーを表示します。extern inlineこれを行いますか?(そうでない場合は、マクロを使用する以外にこの動作を実現する方法はないと思います。) C ++とCの間に違いはありますか? コンパイラのベンダーとバージョンの違いはありますか?

9
インライン関数の静的変数
ヘッダーファイルで宣言および定義されている関数があります。これはそれ自体が問題です。その関数がインライン化されていない場合、そのヘッダーを使用するすべての変換ユニットは関数のコピーを取得し、それらがリンクされている場合は複製されます。関数をインライン化することで「修正」しましたが、「inline」キーワードを指定してもコンパイラーはインライン化を保証しないため、これは脆弱な解決策ではないかと思います。これが当てはまらない場合は、訂正してください。 とにかく、本当の問題は、この関数内の静的変数はどうなるのかということです。最終的に何部になりますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.