2013-08-23 56 views

回答

1

如何傳遞參數以及從執行函數返回的值稱爲呼叫公約

忽略運行時環境(Java和.NET,我在看你)和腳本語言(其中任何一種),純粹用x86上的本機代碼來考慮,其中有很多。如果您曾經聽說過cdeclstdcall這個詞,您可能會遇到它們。

通常返回值將返回寄存器中。例如,cdecl約定用EAX(用於整數和指針)或ST0(用於浮點值)返回數據。

但是調用約定定義的不僅僅是返回格式。它還定義參數如何傳遞(堆棧或註冊,從左到右或從右到左)以及誰負責清理堆棧(即調用者或被調用者)。例如cdecl是呼叫者必須清理堆疊的例子,而被呼叫者保持堆疊整齊。

其他約定包括fastcallpascalsyscall等等。維基百科有一個good breakdown on them all,微軟的MSDN notes。您可能還需要查看SO問題「stdcall and cdecl」,其中詳細介紹了cdeclstdcall

+0

非常好,謝謝 –

0

我認爲一個正確的答案 - 「它取決於」..一般來說它被稱爲「調用約定」。 我覺得非常好的概述你可以找到here

請注意,這個鏈接只有x86相關,所以對於其他體系結構,它們可以完全不同。