問題タブ [inline-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - インライン関数を使用することの何が問題になっていますか?
場合によってはインライン関数を使用すると非常に便利ですが、
インライン関数に欠点はありますか?
結論:
どうやら、インライン関数を使用しても問題はありません。
ただし、次の点に注意してください。
インライン展開を使いすぎると、実際にはプログラムが遅くなる可能性があります。関数のサイズによっては、インライン化によってコード サイズが増減する場合があります。非常に小さなアクセサー関数をインライン化すると、通常はコード サイズが減少しますが、非常に大きな関数をインライン化すると、コード サイズが劇的に増加する可能性があります。最新のプロセッサでは、通常、命令キャッシュがより適切に使用されるため、小さなコードはより高速に実行されます。- Google ガイドライン
インライン関数の速度の利点は、関数のサイズが大きくなるにつれて減少する傾向があります。ある時点で、関数本体の実行に比べて関数呼び出しのオーバーヘッドが小さくなり、メリットが失われます- ソース
インライン関数が機能しない状況がいくつかあります。
- 値を返す関数の場合。return ステートメントが存在する場合。
- 値を返さない関数の場合。ループ、switch、または goto ステートメントが存在する場合。
- 関数が再帰的である場合。-ソース
この
__inline
キーワードにより、optimize オプションを指定した場合にのみ、関数がインライン化されます。最適化が指定されている場合、それが受け入れられるかどうか__inline
は、インライン オプティマイザ オプションの設定に依存します。デフォルトでは、オプティマイザが実行されるたびにインライン オプションが有効になります。__inline
optimize を指定する場合、キーワードを無視するには、 noinline オプションも指定する必要があります。-ソース
c++ - C++ コードのインライン化
次のコードに違いはありますか。
両方の関数がインライン化されますか? インラインは実際に違いがありますか?コードをインライン化する必要がある場合とすべきでない場合のルールはありますか? 構文 (アクセサなど)をよく使用しますが、直接AnotherFunc
指定することはめったにありません。inline
c++ - インライン コードを使用する必要があるのはなぜですか?
私は C/C++ 開発者ですが、いつも困惑する質問がいくつかあります。
- 「通常の」コードとインライン コードに大きな違いはありますか?
- 主な違いはどれですか?
- インライン コードは単なるマクロの「形式」ですか?
- コードをインライン化する場合、どのようなトレードオフを行う必要がありますか?
ありがとう
c++ - C++ のインライン関数の利点は?
C++ でインライン関数を使用する利点と欠点は何ですか? コンパイラが出力するコードのパフォーマンスのみが向上することがわかりますが、今日の最適化されたコンパイラ、高速な CPU、巨大なメモリなどを使用すると (メモリが不足し、すべてが 100KB のメモリに収まらなければならなかった 1980 年代とは異なります) 何が彼らは今日本当に利点がありますか?
c++ - インラインの代わりに __forceinline を使用する必要があるのはいつですか?
Visual Studio には __forceinline のサポートが含まれています。Microsoft Visual Studio 2005 のドキュメントには、次のように記載されています。
__forceinline キーワードは、費用対効果の分析を上書きし、代わりにプログラマーの判断に依存します。
ここで疑問が生じます: コンパイラの費用対効果の分析が間違っているのはいつですか? そして、それが間違っていることをどのように知ることができますか?
この問題について、私が自分のコンパイラよりもよく知っていると想定されるのは、どのようなシナリオですか?
c++ - C++ 関数がインラインであるとはどういう意味ですか?
タイトルを参照してください: C++ 関数がインラインであるとはどういう意味ですか?
c++ - インライン関数の静的変数
ヘッダー ファイルで宣言および定義されている関数があります。これはそれ自体が問題です。その関数がインライン化されていない場合、そのヘッダーを使用するすべての翻訳単位は関数のコピーを取得し、それらがリンクされると複製されます。関数をインラインにすることでそれを「修正」しましたが、「インライン」キーワードを指定した場合でも、私の知る限り、コンパイラはインライン化を保証しないため、これは脆弱なソリューションであると思います。これが正しくない場合は、訂正してください。
とにかく、本当の問題は、この関数内の静的変数に何が起こるかということです。最終的に何部コピーできますか?
c++ - extern inline は何をしますか?
inline
それ自体がコンパイラへの提案であり、その裁量で関数をインライン化する場合としない場合があり、リンク可能なオブジェクト コードも生成されることを理解しています。
私はそれstatic inline
が同じことをすると思います(インライン化される場合とされない場合があります)が、インライン化されたときにリンク可能なオブジェクトコードを生成しません(他のモジュールがそれにリンクできないため)。
写真のどこextern inline
に当てはまりますか?
プリプロセッサ マクロをインライン関数で置き換えたいと仮定し、この関数をインライン化する必要があるとします (たとえば、呼び出された関数ではなく、呼び出し元に対して解決する必要がある__FILE__
およびマクロを使用するため)。__LINE__
つまり、関数がインライン化されない場合に備えて、コンパイラまたはリンカーのエラーを確認したいと考えています。extern inline
これを行いますか?(そうでない場合、マクロに固執する以外にこの動作を実現する方法はないと思います。)
C++ と C の間に違いはありますか?
コンパイラのベンダーやバージョンによって違いはありますか?
c++ - C ++メソッドがクラス内で定義されることがあるのはなぜですか?
私は頻繁にC++で大きな非テンプレートクラスに遭遇します。そこでは、単純なメソッドが実装ファイルで個別にではなく、ヘッダーファイルのクラス本体で直接定義されています。例えば:
なぜこれをするのですか?不利な点があるようです。実装は本来あるべきほど隠されておらず、コードは読みにくく、クラスのヘッダーファイルが多くの異なる場所にインクルードされている場合はコンパイラーの負担も大きくなります。
私の推測では、人々はこれらの関数を他のモジュールにインライン化することを意図していると思います。これにより、パフォーマンスが大幅に向上する可能性があります。ただし、新しいコンパイラは、モジュール間のリンク時にインライン化(およびその他の手続き間の最適化)を実行できると聞いています。この種のリンク時間最適化のサポートはどの程度広く、実際にこの種の定義は不要になりますか?これらの定義に他の正当な理由はありますか?
vb6 - VB6(erk)-インライン関数?
アプリケーションにはVB6を使用しています。
コンパイラに関数をインライン化させることは可能ですか?
または、同じことを実現するアドインはありますか?
私のコードには、関数として1回リストするのではなく、使用するすべてのポイントでコードを繰り返すことで、ハッキングを困難にしたい安全な部分があります。
誰かが私の質問に答えてくれることを願っています!