問題タブ [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.

0 投票する
4 に答える
310 参照

c# - プロパティ/メソッドのインライン化とリフレクションへの影響

SO に関する質問の 1 つに対する私の回答は、Valentin Kuzub によってコメントされました。彼は、JIT コンパイラによってプロパティをインライン化すると、リフレクションが機能しなくなると主張しています。

ケースは次のとおりです。

Fuzz関数はラムダ式を受け入れ、リフレクションを使用してプロパティを見つけます。HtmlHelper拡張機能の MVC では一般的な方法です。

Barプロパティがインライン化されてもリフレクションが機能しなくなるとは思いません。これは、Barインライン化されtypeof(Foo).GetProperty("Bar")、有効な を返す呼び出しであるためですPropertyInfo

これを確認していただけますか、またはメソッドのインライン化に関する私の理解が間違っていますか?

0 投票する
7 に答える
2107 参照

c++ - インライン化するかしないか

最近、いくつかのクラスを書いています。そして、それが悪い習慣なのか、パフォーマンスが悪いのか、カプセル化を壊すのか、それともヘッダー内でいくつかの小さなメンバー関数を実際に定義することに本質的に悪いことが他にあるのかと思っていました(私はGoogleを試しました!)。これは、私がこれをたくさん使って書いたヘッダーの例です。

では、このような関数のインライン化に本当に問題があるのでしょうか、それとも許容できるのでしょうか?

(また、これが「コードレビュー」サイトに適しているかどうかもわかりません)

0 投票する
6 に答える
477 参照

c++ - 関数のインライン化の利点を推定するための c++ ヒューリスティック

C++ では、特に関数が非常に頻繁に呼び出され、プログラムの実行時間の >= 10% を占める場合 (例: ブルート フォースの評価関数または確率的最適化プロセス)。インライン化は最終的には私の手に負えなくなるかもしれませんが、私はまだ興味があります。

0 投票する
1 に答える
301 参照

c++ - クラスメンバー関数で__inline__を実行するときのc ++リンクエラー:シンボルが見つかりません

メンバー関数を強制的にインライン化しようとすると、次のエラーが発生します。

ここに蒸留されたエラー生成コードがあります

Xcode / gccを使用しています

0 投票する
3 に答える
216 参照

c++ - C++でのインライン関数のコンパイラ最適化

引数にポインタをとる関数がインライン化されている場合、コンパイラは最適化プロセス中に間接参照を削除しますか?もちろん、それが理にかなっているとき。

明らかな例を次に示します。

この場合は些細なことですが、コンパイラが最適化を行う場合、そうでない場合がありますか?

ボーナス:コンパイラによって行われたいくつかの「基本的な」最適化のリストはどこで入手できますか?

追伸:私はただ興味があります

0 投票する
2 に答える
1155 参照

c++ - コンパイラのインライン展開が手動のインライン展開より遅いコードを生成するのはなぜですか?

バックグラウンド

C++ で記述された数値計算ソフトウェアの次の重要なループは、基本的に 2 つのオブジェクトをそのメンバーの 1 つによって比較します。

aおよびbクラスは次のASDとおりです。

この比較を軽量メンバー関数に入れることの影響を調査していました。

そしてそれを次のように使用します:

コンパイラはこの関数をインライン化していますが、アセンブリ コードが異なり、10% を超えるランタイム オーバーヘッドが発生するという問題があります。私は質問する必要があります:

質問

  1. コンパイラが異なるアセンブリ コードを生成するのはなぜですか?

  2. 生成されたアセンブリが遅いのはなぜですか?

編集: 2 番目の質問は、@KamyarSouri の提案 (j%16) を実装することで回答されました。アセンブリ コードはほぼ同じに見えます ( http://pastebin.com/diff.php?i=yqXedtPmを参照)。唯一の違いは、18、33、48 行目です。

素材

このグラフは、私のコードの 50 回のテスト実行に対する FLOP/s (倍率まで) を示しています。

ここに画像の説明を入力

プロットを生成する gnuplot スクリプト: http://pastebin.com/8amNqya7

コンパイラ オプション:

/Zi /W3 /WX- /MP /Ox /Ob2 /Oi /Ot /Oy /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- / EHsc /MT /GS- /Gy /arch:SSE2 /fp:正確 /Zc:wchar_t /Zc:forScope /Gd /analyze-

リンカー オプション: /INCREMENTAL:NO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32. lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /TLBID :1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

0 投票する
1 に答える
557 参照

.net - MethodBase.GetCurrentMethod が信頼できる/予測できるのはいつですか?

メソッドがインライン化される可能性があります。それを防ぐための属性があります(「そのための属性があります」)。ただし、JITter ( http://www.hanselman.com/blog/ReleaseISNOTDebug64bitOptimizationsAndCMethodInliningInReleaseBuildCallStacks.aspx ) による末尾呼び出しの最適化が原因で、メソッドが x64 で独自のスタック フレームを取得しない場合もあります。これは の動作に影響しますMethodBase.GetCurrentMethodか?

私が見つけることができる議論は、主にインライン化に関するものです (メソッドが CLR によってインライン化されるのはいつですか? )。これらの議論はそれ自体興味深いものですが、私の問題は実際MethodBase.GetCurrentMethodには、プログラマーが呼び出しを行った同じメソッドを識別するためにどのような状況 (もしあれば) に依存できるかということです (たとえば、現在のメソッドは実際にはサロゲートです)。インライン化はMethodBase.GetCurrentMethodだまされやすい方法ですが、それしか方法がないのでしょうか?

0 投票する
1 に答える
800 参照

java - Java (JIT) は再帰メソッドをインライン化できますか?

質問はそれをすべて言います。Can a recursive function be inline?を見ていました。それをJavaに関連付けようとしています。

0 投票する
1 に答える
233 参照

llvm - LLVMでインライン化はどのように機能しますか?

llvm インライン化の仕組み (Inliner クラス) を理解しようとしています。私が理解していない操作は次のとおりです。

SmallVector が llvm クラスの場合。特に、このコードの「16」の機能が何なのかわかりません..

0 投票する
3 に答える
170 参照

c - 関数のインライン化

Linuxでgccを使用してCで開発しています。

次の方法で、小さな関数を .H および .C ファイルに整理しています

これらの関数は小さいため、インライン化するのに非常に適していますが、確実かどうかはわかりません。

私は自分のファイルを整理する方法に疑問を持っており、.C ファイルを使用せずにすべての関数を .h ファイルに直接インライン化する方がよいのではないかと考えていました。私の疑問を明確にするために少し手伝ってもらえますか?