DLLを介したC++コンパイラのインラインメソッド呼び出しが可能ですか? .NET JITは可能ですか?DLL間でC++コンパイラのインラインメソッド呼び出しを行うことは可能ですか?
答えて
これは、.NETジッタの場合は確かです。これは単にDLLからILをロードするだけで、ジャストインタイムコード生成はDLLから来たという事実をなくします。 DLLのすべてのコードは同じローダーヒープに入ります。これの1つの結果は、AppDomain全体がアンロードされない限り、DLLをアンロードできないことです。
C++コンパイラでは明確なNoです。エクスポートされた関数はプリコンパイルされ、DLLベースのアドレスからオフセットされた固定アドレスに配置されます。最適化は可能ですが、IATを介した間接的なジャンプが必要です。しかし、インラインではなく、コンパイラによって行われなければなりません。
偉大な答え、ありがとう! – Ostap
JITが可能です。 .NETがそうしているかどうかは分かりません。 .NETはEXEとDLL用にコンパイルされたマシンコードをキャッシュし、実行ごとにカスタマイズされたバージョンを再コンパイルするとそのキャッシュは役に立たなくなります。 –
「.net」タグが含まれていない場合は、答えはです。です。しかし、 ".net"タグを使用すると、をインラインに最適化することができます。DLLがP/Invokeに対してネイティブコードDLLでない限り、ジッタは少なくともになります。
C++ヘッダーファイルで完全に定義された関数は、関数に割り当てられたコンパイル単位がないため、通常の状況下ではコンパイラーによってインライン化されなければなりません。もちろん、関数のエントリポイントが見つからないので、関数はDLLに属していないと言うこともできますが、これはニッピッカーの視点に過ぎません。
コンパイラのフラグ/GL (Whole Program Optimization)をチェックしてください。
このフラグは、関数のインライン展開を含む、モジュールの境界を越えて最適化するようリンカに指示します。
ちょっとわかりました。つまり、/ GLはクロスDLL呼び出しではなく、1つはネイティブです。 –
これは、コードを体系化するのに役立ちます。それがなければ、ほとんどの関数をヘッダーに入れるか、あるいは大規模な.cppファイルに入れなければならないでしょう(ほとんどのインライン展開に役立ちます)。 – ruslik
- 1. プログラム(DLL)から呼び出すことができるC++コンパイラ
- 2. C DLLからC#DLLを呼び出すことはできますか?
- 3. Flexで軽量REST呼び出しを行うことは可能ですか?
- 4. バッチPOST API呼び出しを行うことは可能ですか?
- 5. WCF(.NET 3.0)でJSON呼び出しを行うことも可能ですか?
- 6. ワークフローでコマンドを呼び出すことは可能ですか?
- 7. doctrineの移行で.sqlファイルを呼び出すことは可能ですか?
- 8. C#で動的オブジェクトを呼び出すことは可能ですか?
- 9. C++でC#dllを呼び出す
- 10. C#コードでC++ dllを呼び出す
- 11. javascriptからobjective-c pushViewControllerを呼び出すことは可能ですか?
- 12. C++からFortranインターフェイスを呼び出すことは可能ですか
- 13. クラスのインラインメソッドを呼び出すpublicメソッド
- 14. コンストラクタを呼び出すことは可能ですか?
- 15. 私のC++ DLLでC#DLLを呼び出す方法は何ですか?
- 16. コンパイラなしでcmakeを使うことは可能ですか?
- 17. 呼び出し元のDLLまたは実行可能モジュールを呼び出す側から受け取ることができます
- 18. vbscriptでC#dllを呼び出す
- 19. vb.net dllのdllからc#クラスをインポートすることは可能ですか?
- 20. Cassandra:CQLで呼び出し可能な行のタイムスタンプエントリですか?
- 21. このDLL関数をC++/Cから呼び出す方法
- 22. PDO :: fetchAll()をもう一度呼び出すことは可能ですか?
- 23. exeとdllの間のC++呼び出しでエラーが発生しました
- 24. jquery呼び出しで外部リンクを持つことは可能ですか?
- 25. ブロックされたPython内で呼び出し可能な呼び出し可能なのはなぜですか?
- 26. strは呼び出し可能ではないか、intは呼び出し可能ではありません
- 27. PowershellからC#dllを呼び出す
- 28. jQueryで別のAJAX呼び出しの中でAJAX呼び出しを行うことはできますか?
- 29. DLLが.NET DLLを呼び出すことはできますか?
- 30. ストライプ "公開可能なAPIキーでこのAPI呼び出しを行うことはできません。"
C++の場合:確かにいいえ。あなたが持っていないものをどうやってインライン化できますか? – ruslik
@ruslik:機能を「所有」するためのソースコードは必要ありません。インラインにするオブジェクトファイルのどの部分がコンパイラによってファイルに格納されているかを知るだけで済みます。 –
@ Jorgen:どちらかがDLLにあるので、残りのコードとは独立して更新できます。明示的にインライン化するか、それ以上DLLにはなりません。 – ruslik