回答
Here是解釋何時使用fastcall的文章。它實際上規定的情況下,當你真正別無選擇,只能使用它:
一些VCL類,如從TList,讓 你指定一個回調函數(在從TList的情況下 排序例程)。 在這種情況下,您必須使用__fastcall 關鍵字,因爲VCL 預期它。
謝謝。 作爲備註: 從您的文章中,在「是__fastcall實際上很快?」部分: 「我測試的底線是,註冊調用約定並沒有比C調用約定更快,而且在大多數情況下,它的運行速度更慢。雖然時間上的差異很小,但我向自己證明它會__fastcall的支持者很難聲稱註冊調用約定比其他任何「 ...」要重複我已經說過的話,我建議您不要使用__fastcall,除非它是特別要求的:) :) – rkellerm 2010-06-09 08:30:57
__fastcall嘗試在CPU寄存器中傳遞函數參數,而不是在可能的情況下傳遞堆棧,速度更快。
這裏有一個MSDN文章解釋__fastcall調用約定的鏈接: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx
前兩個DWORD或較小 參數在ECX傳遞和EDX 寄存器;所有其他參數都是從右向左傳遞 。
這意味着這將只適用於前兩個參數,只有當他們是< = 32位。
總的來說,我會說,不要指望有任何大的性能優勢。
感謝鏈接。 – 2010-07-18 08:43:01
我有一個案例,我有效地使用它 - 這是一個非常小的asm例程(3條指令),它操縱一個寄存器中的單個值。
對於除了最小和性能最重要的例程之外的任何事情,儘管調用約定應該沒有什麼區別。
- 1. 是否可以說服GCC模仿fastcall調用約定?
- 2. Vim,實際使用示例
- 3. 使用LLVM Alias和IFunc功能的任何實際示例?
- 4. LockSupport&AbstractQueuedSynchronizer使用的任何實際示例?
- 5. 何時使用Paxos(真實的實際用例)?
- 6. BufferManager的實際用例
- 7. 「ref」使用的實際示例
- 8. 實際的例子使用Hibernate FlushMode.ALWAYS
- 9. 何時使用調用約定
- 10. 多約束泛型函數調用如何實際工作?
- 11. 默認情況下,C++成員函數是否使用cdecl + fastcall約定編譯?
- 12. 如何使用php調用python實例?
- 13. 實際使用
- 14. Laravel路由實際使用案例
- 15. 「實時」約束是否阻止使用任務調度程序?
- 16. 確定實際使用的SharePoint功能
- 17. C#實際使用
- 18. 實際使用IBOutletColletion
- 19. 實際使用dynamic_cast?
- 20. 使用用於Clojure的新some-的實際例子>宏
- 21. Javascript關閉的實際用法/示例
- 22. Boost :: MPL的實際用法示例?
- 23. 用例建模的實際好處
- 24. com.google.firebase.database.DatabaseException:調用setPersistenceEnabled()必須FirebaseDatabase實例的任何其他使用之前進行
- 25. Symfony類加載器 - 用法?沒有實際使用的例子
- 26. 使用Reflection調用使用MethodInfo實例的方法。使用Reflection.Emit
- 27. c中的調用約定
- 28. 的Delphi thiscall調用約定
- 29. 是實際使用的xsi:schemaLocation?
- 30. 實際使用IdentityHashMap的
顯然它更快,因此更好;)。 – Domenic 2010-06-09 08:03:13
請參閱@luvieere參考文章:它不是更快...... :) – rkellerm 2010-06-09 08:31:51