隨着函數的執行完成,指令和局部變量從堆棧中移除,如何使用存儲在內存中的進程主程序的返回值?進程內存空間,函數返回的值如何?
0
A
回答
1
如何傳遞參數以及從執行函數返回的值稱爲呼叫公約。
忽略運行時環境(Java和.NET,我在看你)和腳本語言(其中任何一種),純粹用x86上的本機代碼來考慮,其中有很多。如果您曾經聽說過cdecl
或stdcall
這個詞,您可能會遇到它們。
通常返回值將返回寄存器中。例如,cdecl
約定用EAX(用於整數和指針)或ST0(用於浮點值)返回數據。
但是調用約定定義的不僅僅是返回格式。它還定義參數如何傳遞(堆棧或註冊,從左到右或從右到左)以及誰負責清理堆棧(即調用者或被調用者)。例如cdecl
是呼叫者必須清理堆疊的例子,而被呼叫者保持堆疊整齊。
其他約定包括fastcall
,pascal
和syscall
等等。維基百科有一個good breakdown on them all,微軟的MSDN notes。您可能還需要查看SO問題「stdcall and cdecl」,其中詳細介紹了cdecl
和stdcall
。
0
我認爲一個正確的答案 - 「它取決於」..一般來說它被稱爲「調用約定」。 我覺得非常好的概述你可以找到here
請注意,這個鏈接只有x86相關,所以對於其他體系結構,它們可以完全不同。
相關問題
- 1. 如何返回空值的函數列
- 2. 如何返回sum函數的空值?
- 3. 如何更改另一個進程的內存空間值
- 4. 如何通過函數內部的回調函數返回值?
- 5. PHP函數返回空值
- 6. HasMap函數返回空值
- 7. 如何在python中的多處理進程中存儲函數的返回值?
- 8. Ext.Msg.confirm內函數返回值
- 9. 從函數內返回值
- 10. 如何從線程函數返回值?
- 11. 如何使函數返回它的內函數的值?
- 12. 如果函數值爲空則返回
- 13. 如何調用pl/sql存儲過程(函數,返回數值)?
- 14. 進程的內存地址空間
- 15. 從函數獲得空值返回值
- 16. 在函數中返回值爲空的返回值golang
- 17. 如何使用array.map函數返回任何內容(空數組)
- 18. 內存分配內核空間和用戶空間進程
- 19. MongoDB中的MapReduce函數返回空值
- 20. 的Hashmap得到函數返回空值
- 21. 的Javascript/jQuery函數返回值爲空
- 22. 數據緩存從函數返回空值的機會
- 23. 如何從函數內的回調中返回值?
- 24. 如何從回調函數返回值
- 25. 如何從vim中的函數返回空間?
- 26. 存儲過程返回空值
- 27. 存儲過程返回空值
- 28. 存儲過程返回空值int
- 29. 無法返回函數內部的值
- 30. 返回函數內部的值
非常好,謝謝 –