問題タブ [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.
css - キャッシュされた CSS ファイルにはどのような影響がありますか?
具体的には、ブラウザーはスタイルシートのテキスト コンテンツのみをキャッシュするか (ネットワークから再度取得する必要がないため)、または解析後に、含まれている CSS ルールの内部表現もキャッシュするか (フェッチもキャッシュされたファイルの解析は必要ですか?
テキスト コンテンツのみがキャッシュされる場合、スタイルシートをインライン化するよりもスタイルシートをキャッシュする利点は何ですか (キャッシュできない場合)?
c++ - 侵入型データ構造におけるメンバー フックとベース フック
侵入型のデータ構造をコーディングしていて、ベース フックとメンバー フックのどちらを使用するか迷っています。コードは何度も呼び出されるため、私の質問は、パフォーマンスと、コンパイラがそのようなコードをどの程度インライン化できるかに関するものです。
基本フックは継承に基づいていますが、メンバー フックはテンプレート パラメーターを介してメンバーへのポインターを使用します。私の設計上の選択はメンバーフックを使用することですが、私の経験では、ポインターは静的コードよりも最適化がはるかに難しいと言われています。一方、これらのポインターはすべてコンパイル時に認識されており、おそらくコンパイラーは何が起こっているかを分析する魔法を行うことができます。
誰もこれについて経験がありますか?データ、ヒント、参考文献は大歓迎です。
haskell - 定義に INLINE/INLINABLE プラグマがありません
タイトな内部ループで使用されるメソッドの特殊化を行おうとしていますが、GHC は次のことについて不平を言っています:
ただし、明らかに -O でビルドされています。
そして明らかに、私は INLINABLE プラグマを持っています:
それで、私は何を間違っていますか?
c++ - C++ インライン関数に呼び出し命令があるのはなぜですか?
関数呼び出しが行われるインライン関数では、関数呼び出しを関数定義の本体に置き換えることを読みました。
上記の説明によると、ユーザーの場合は関数呼び出しはありませんinline
。
その場合、アセンブリ コードに 3 つの命令が表示されるのはなぜですか?call
ノート
オブジェクトファイルの完全なダンプはこちら
javascript - Chrome JS プロファイラーと「最適化されていません: インライン展開が回避されました」という警告
CPU 使用率を記録する Chrome JS プロファイラーを使用してアプリを実行しようとしましたが、いくつかの警告が表示されました。「ForInStatement は高速ではありません」という警告がいくつかありましたが、修正しましたが、「Inlining Bailed Out" 警告、たとえば次のコード:
この関数は基本的に障害物を作成します (display(obstacles[i]) は障害物の特定の画像を描画します - 上記の「ForInStatement」警告のため、ロード用とコード用の 2 つの別個の関数)。
特に 1 分以上プレイすると、「Inlining Bailed Out」というメッセージがランダムに表示され、move_loader、display_loader、collision_loader 関数のいずれかに表示されます。するときもあれば、しないときもあります。
このメッセージの本当の意味を一言で説明してもらえますか? 私は Web 上で多くのスレッドを読み、「ForInStatement」のロジックは理解していますが、インライン展開についての手がかりはありません。
また、直し方を教えていただけないでしょうか。
ありがとうございました!
visual-studio - MSVC 2013 は、別のオブジェクト ファイルから x64 アセンブリ コードへの呼び出しをインライン化できますか?
MSVC で x64 アセンブリを学習しています。x64 コードでは、インライン アセンブリは許可されていません。別のファイルに非常に単純な浮動小数点関数を書きました。
次に、C++ から関数を呼び出しました。
リリース モードでコンパイルし、/O2
最適化して/LTCG
有効にすると、逆アセンブルされた実行可能ファイルは次のようになります。
ただし、同じ関数を C++ で記述すると、単一のインラインmulsd
命令に変換されます。
(実際には、プログラム全体がノーオペレーションにならないように から結果を返さなければならmain
ず、入力変数をランダム化して、コンパイル時にコンパイラが結果を計算しないようにする必要がありました。)
これは、手書きのアセンブリでコードを最適化したいプログラマーにとって、かなり深刻な欠陥のように思えます。MSVC がそれをインライン化できない場合、アセンブリで大量の作業を行わない限り、関数呼び出しのオーバーヘッドに見合わない可能性があります。
不足している手書きのアセンブリを MSVC でインライン化する方法はありますか?
編集:スタックを使用するより複雑なアセンブリ関数はインライン化がより困難になる可能性があることは承知していますが、揮発性レジスタのみを使用する単純なものは本当に簡単なはずです...そうですか?