6

呼び出し規約fastcallを使用する実際のユースケースはありますか?

ありがとう。

4

3 に答える 3

5

__fastcallは、可能であればスタックではなくCPUレジスタの関数引数を渡そうとします。これはより高速です。

__fastcall呼び出し規約を説明するMSDN記事へのリンクは次のとおりです。http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71) .aspx

最初の2つのDWORD以下の引数は、ECXおよびEDXレジスタで渡されます。他のすべての引数は右から左に渡されます。

これは、これが最初の2つの引数に対してのみ機能し、それらが32ビット未満の場合にのみ機能することを意味します。
一般的に言って、これによる大きなパフォーマンス上の利点は期待しないでください。

于 2010-06-09T08:35:25.913 に答える
3

これは、 fastcallをいつ使用するかを説明する記事です。実際には、それを使用する以外に選択肢がない場合を指定します。

TListなどの一部のVCLクラスでは、コールバック関数(TListの場合はソートルーチン)を指定できます。この場合も、VCLが期待するように、__fastcallキーワードを使用する必要があります。

于 2010-06-09T08:05:10.947 に答える
1

私はそれを効果的に使用する1つのケースがあります-それはレジスターの単一の値を操作する非常に小さなasmルーチン(3つの命令)です。

呼び出し規約は実際には違いがないはずですが、非常に小さく、最もパフォーマンスが重要なルーチン以外の場合。

于 2010-06-09T09:47:21.417 に答える