2010-06-09 75 views

回答

3

Here是解釋何時使用fastcall的文章。它實際上規定的情況下,當你真正別無選擇,只能使用它:

一些VCL類,如從TList,讓 你指定一個回調函數(在從TList的情況下 排序例程)。 在這種情況下,您必須使用__fastcall 關鍵字,因爲VCL 預期它。

+0

謝謝。 作爲備註: 從您的文章中,在「是__fastcall實際上很快?」部分: 「我測試的底線是,註冊調用約定並沒有比C調用約定更快,而且在大多數情況下,它的運行速度更慢。雖然時間上的差異很小,但我向自己證明它會__fastcall的支持者很難聲稱註冊調用約定比其他任何「 ...」要重複我已經說過的話,我建議您不要使用__fastcall,除非它是特別要求的:) :) – rkellerm 2010-06-09 08:30:57

5

__fastcall嘗試在CPU寄存器中傳遞函數參數,而不是在可能的情況下傳遞堆棧,速度更快。

這裏有一個MSDN文章解釋__fastcall調用約定的鏈接: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx

前兩個DWORD或較小 參數在ECX傳遞和EDX 寄存器;所有其他參數都是從右向左傳遞 。

這意味着這將只適用於前兩個參數,只有當他們是< = 32位。
總的來說,我會說,不要指望有任何大的性能優勢。

+1

感謝鏈接。 – 2010-07-18 08:43:01

1

我有一個案例,我有效地使用它 - 這是一個非常小的asm例程(3條指令),它操縱一個寄存器中的單個值。

對於除了最小和性能最重要的例程之外的任何事情,儘管調用約定應該沒有什麼區別。