問題タブ [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.
java - Javaでインライン化する静的関数
最初のコード:
distance
非常に頻繁に呼び出されます。でjavac
コンパイルしてから逆コンパイルすると、次のjavap -c
バイトコードが表示されます。
javac
2番目の関数が最適化されていないようですdistance
。
2番目のコードは、私が思うに、より速く:
そしてそのバイトコード:
invokestatic
静的関数のインライン化と同じくらい高速ですか?なぜjavac
これを最適化しなかったのですか?あるいは、実際には最適化されており、これら2つのコードで同じ結果が得られるかもしれませんが、何かが足りませんか?
c++ - 関数の実装でインラインキーワードを繰り返す必要がありますか?
私は常にヘッダーの外で実装を維持しようとしているので、テンプレートとインライン関数の場合、私は通常次のようなことをします
私の質問は、関数の実際の実装のためにインラインキーワードを繰り返すことについて、C ++仕様は何と言っているのでしょうか?(この例に示すように)
たくさんの関数が乱雑になるので、私は本当にそれをしたくありません。私のコンパイラは文句を言いませんが、コンパイラはまだインラインヒントを受け入れるのだろうかと思います。
誰か知ってる?
compiler-construction - LLVMjitでの関数のインライン化
私はLLVMフレームワークとコンパイラの分野に不慣れです。私はそれに精通しようとしています。コンパイラでいくつかの予備的な読みをした後、私は次の質問があります:
LLVMJITで関数のインライン化がどのように行われるのか知りたいです。これは、jitコンパイル時に使用される静的インラインで使用されるパスと同じですか?実行時(つまり、jitコンパイル時)の情報は静的コンパイル時と比較して優れているため、いくつかのより優れた最適化パス(安価です)時間の観点から)を使用することができます。
私は何かが足りないのですか?私はこの点でいくつかの助けに本当に感謝しています。
前もって感謝します。
android - Android Proguard はインライン化されません
私は最新の Android SDK (4.1) を使用しており、Proguard を有効にして署名済みの jar をエクスポートしようとしました。しかし、最適化された APK を逆コンパイルした後、インライン化されると予想していたメソッドがインライン化されていないことに気付きました。
コードが正しく難読化されたため、Proguard が実行されたことはわかっています。これを確認するために、このメソッドをアクティビティに追加しました。
このプライベート メソッドは、私のアクティビティで 1 回だけ呼び出されます。これはプライベートであるため、オプティマイザには、1 回だけ呼び出され、インライン化する必要があることは明らかです。
ドキュメントには、すべての最適化がデフォルトで有効になっており、Proguard の「短い、または 1 回だけ呼び出されるインライン メソッド」と記載されています。
インライン化を有効にするために Proguard に指定する必要がある特定のフラグはありますか?
編集
私のproguard構成ファイルには含まれています
編集
使用後
メソッドがインライン化されていない理由は次のとおりです。
testInlining
しかし、メソッドが別のメソッドで使用されるメソッドで使用されているという事実が、 in でgetIvConfig
のインライン化をどのように防ぐかはわかりません。testInlining
getIvConfig
c++ - C++での関数ラッパーのインライン化の制限
私の質問は、C ++の関数ラッパーへのインライン最適化の適用に関するものです。次のコードを検討してください。WorkerStructureオブジェクトは、機能の一部をカプセル化する関数ラッパーで初期化されます。関数ラッパーは、WorkerStructure::doSomeWorkメソッドが呼び出されたときに使用されます。
WorkerStructure :: doSomeWorkメソッドに適用すると、workerFunctionオブジェクトによってカプセル化された機能はインライン化されますか?明らかに、機能が他の変換ユニットで定義されている場合、workerFunctionオブジェクトは関数ポインターのみをカプセル化しますが、インライン化が行われる他の状況はありますか?不可能ですか?
別の変換単位で定義されたラムダ関数が関数ラッパーを介して渡される場合、それは関数ポインターを渡すことと実質的に同等ですか?
c# - JITインライン化が発生する簡潔なコードスニペットを作成できますか?
JITインライン化が発生する「HelloWorld」サイズのC#コードスニペットを作成しようとしています。これまでのところ私はこれを持っています:
これは、VisualStudioから「リリース」-「任意のCPU」および「デバッグなしで実行」としてコンパイルします。サンプルプログラムアセンブリの名前が表示されるので、明確にGetAssembly()
インライン化されていません。Main()
そうでない場合は、mscorlib
アセンブリ名が表示されます。
JITインライン化が発生するC#コードスニペットを作成するにはどうすればよいですか?
c++ - MSVC 10.0 コンパイラがしばしば inline キーワードを無視するのはなぜですか?
私は、リアルタイム システムで使用される非常に複雑な C++ コードをいくつか持っているため、絶対に速度に敏感です。これは Linux で開発され、高速化するために多くの関数が「インライン」キーワードでマークされ、インライン化を可能にするためにヘッダー ファイルに移動されました。
このコードを Windows (msvc 10.0、Windows 7) に移植したところ、実行速度が約 30% 遅くなりました。いくつかのプロファイリングを行った後、問題は基本的に多くの関数がインライン化されていないことにあることがわかりました。代わりに「__forceinline」を使用すると、約 10 ~ 20% の速度向上が簡単にわかります。
誰かがこれについて説明していますか?msvc のアルゴリズムがはるかに保守的に機能するだけですか? それとも、構成オプションが欠落しているなど、何か間違ったことをしただけですか?
performance - Haskellでインライン化の位相制御を使用するにはどうすればよいですか?
ドキュメントによると、
GHCのパイプラインで、INLINEプラグマがオンになっているタイミングを正確に制御したい場合があります。
なぜ私はこれが欲しいのですか?(RULESプラグマも使用する場合を除いて、この場合、関連するルールを実行できるようにするために、関数のインライン化を延期したい場合があります。)単純化プロセスの特定の段階でのみインライン化する方がよい関数はどれですか。
c - C: コンパイル済みコードをインラインとしてコンパイルする
かなり複雑な理由で、個別にコンパイルしてからリンクしたい一連のファイルがありますが、1 つの関数が 2 番目の関数にインラインで配置されるようにします。これは、GCC で異なるフラグを使用してコンパイルしたいためです。それを回避する方法を調べることで問題を解決できることはわかっていますが、これが可能かどうかを知りたいです。
編集1:そうでない場合、「外部」関数を、他のファイルに含めることができるアセンブリの形式にコンパイルすることは可能ですか? はい、クレイジーですがクールでもあります...
ざっと見てみると、これはオプションである可能性があります。自動でコンパイルするのは無理だと思うので、どなたかアセンブルについて教えていただけないでしょうか?基本的なARMアセンブリのみを使用しました。-S
GCC のフラグを使用しておもちゃの関数にコンパイルしました。レジスタと変数をリンクするにはどうすればよいですか? それらは常に同じ順序になりますか?この機能は高度に最適化されます。いつ抽出を開始および終了する必要がありますか? .cfi_startproc
最初と最後に含める必要があり.cfi_def_cfa 7, 8
ますか?#
編集 2:
この投稿では、gcc がこのようなリンク時の最適化を行う方法について詳しく説明してい-flto
ます。悲しいことに、これはバージョン 4.5 でのみ使用できます。これをコンパイルする必要があるマシンのルート アクセス権がないため、インストールすることもできません。別の可能な解決策は、異なるバージョンの GCC を UNIX マシンのフォルダーにインストールする方法を説明することです。