問題タブ [inlining]
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++ - インライン展開は、likely への呼び出しに失敗し、コード サイズが大きくなる [-Winline] が、インラインを使用していない
C++ には非常に新しいです。
これが私のユーザー定義の fmiNode クラスです: (fmi.h)
これが私の主な方法です(fmi.c)
fmiNode オブジェクトを 1 つだけインスタンス化する場合は、すべて問題ありません。ただし、次の 3 つは警告をスローします。
ここで何が間違っていますか。
編集:
したがって、クラスを次のように定義する必要があります:?
乾杯、リス
clang - Clang インライン展開 getelementptr を無効にする
次の単純なcコードがあります。
この場合、clang が生成する IR は次のようになります。
ご覧のとおり、getelementptr 命令は load 命令内にインライン化されています。clang でこのインライン化を無効にする方法はありますか? 私はclangバージョン3.8.0を使用しています。
c++ - インライン化とデッド コードの削除の最適化により、テンプレートのインスタンス化を防ぐことができますか?
次のコード例を考えると
GCC は以下を正しく報告します。
私の質問は次のとおりです。この保証された動作は、標準またはその他のドキュメントで何らかの決定を下していますか?
私の質問についてより正確に言うと:
C
はテンプレート クラスであり、メンバーf()
がg()
参照されている場合にのみインスタンス化されます。f()
で参照されていmain()
ます。参照しない場合g()
(内部的に不完全な型を使用しようとします)、コードはコンパイルされます。しかしg()
、内部の if-branch 内で参照されていますf()
。このブランチは決定論的に実行されることはありません。そのため、コンパイラはこのデッド コード ブランチを無視/削除する可能性があり、インスタンス化を回避できますg()
(これにより、不完全な型を使用しようとするエラーが発生します)。ただし、これは発生していません (少なくとも私が試したコンパイラでは)。
これを許可すると、コンパイラの最適化設定を調整するだけで違法なコードが合法的なコードに変わることを理解していますが、それでも私の質問は、このコード例がいくつかのルール (最適化とテンプレート パスの順序など) によって失敗することが保証されているかどうかです。どこかで読めます。
洞察をありがとう。
c++ - インライン化されていないインライン関数のコピーが 1 つだけであることが保証されていますか?
大きな関数をインラインで宣言し、コンパイラがそれをスタンドアロン関数としてコンパイルすることを選択した場合、プログラム内のそのインライン化されていないインライン関数のコピーが 1 つだけであることが保証されているか、それともコンパイラが複数の非インライン関数を作成することになるか-異なる翻訳単位でのこの関数のインラインコピー?
または、歯ぎしりを引き起こすことがほぼ確実な方法で言い換えると、前処理時間が問題にならない場合、ヘッダーファイルでインラインで大きなメソッドを定義することは、コードを再利用することなくそのコードを再利用できる効果的な方法です。別の翻訳単位でコンパイル/リンクするには?
javascript - JavaScript 関数の自動インライン展開
これは、最新の JavaScript エンジンにおける JIT コンパイラの典型的な動作に関する質問です。多くのフィールドを持つクラス A があり、そのインスタンスがループ内を含めて別のクラス B から頻繁に使用されているとしましょう。A の内部を公開するのではなく、1 行のアクセス メソッドがたくさんあります。個々の方法はパフォーマンスにほとんど違いはありませんが、全体として大きな違いがあると仮定しましょう。最新の JIT はこれらの関数をインライン化しますか?
c++ - C++ インライン化 - 「正しい」方法とは
私はインターネットで C++ のインライン化について多くのことを検索しましたが、誰もが別の実装方法を好むようです。
私の問題は次のようになります。
この関数getI()
は数千回呼び出されるため、この関数を「インライン化」すると便利だと思います。そうする最善の方法は何ですか:
どの方法が最良または最もパフォーマンスの高い実装であるかのヒントを教えてください。手伝ってくれてありがとう :)
c++ - __forceinline とインラインの使用法
クラス内で __forceinline または inline を使用する場合、MSVC のヘッダー ファイル内に定義を含める必要がありますか? これについては、さまざまなコンパイラによって異なるさまざまな意見を聞いたことがあります。
例 1:
例 2: