呼び出し規約fastcallを使用する実際のユースケースはありますか?
ありがとう。
__fastcallは、可能であればスタックではなくCPUレジスタの関数引数を渡そうとします。これはより高速です。
__fastcall呼び出し規約を説明するMSDN記事へのリンクは次のとおりです。http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71) .aspx
最初の2つのDWORD以下の引数は、ECXおよびEDXレジスタで渡されます。他のすべての引数は右から左に渡されます。
これは、これが最初の2つの引数に対してのみ機能し、それらが32ビット未満の場合にのみ機能することを意味します。
一般的に言って、これによる大きなパフォーマンス上の利点は期待しないでください。
これは、 fastcallをいつ使用するかを説明する記事です。実際には、それを使用する以外に選択肢がない場合を指定します。
TListなどの一部のVCLクラスでは、コールバック関数(TListの場合はソートルーチン)を指定できます。この場合も、VCLが期待するように、__fastcallキーワードを使用する必要があります。
私はそれを効果的に使用する1つのケースがあります-それはレジスターの単一の値を操作する非常に小さなasmルーチン(3つの命令)です。
呼び出し規約は実際には違いがないはずですが、非常に小さく、最もパフォーマンスが重要なルーチン以外の場合。