c語言堆棧基本代碼 既然C語言函數(shù)的局部變量會被釋放,那為什么函數(shù)還可以把它return返回呢?
既然C語言函數(shù)的局部變量會被釋放,那為什么函數(shù)還可以把它return返回呢?看了下面兄弟的回信,我們只能說他們一半是對的。真正的原因是abi(應用程序二進制接口)。ABI定義了與系統(tǒng)交互的細節(jié),如數(shù)據(jù)
既然C語言函數(shù)的局部變量會被釋放,那為什么函數(shù)還可以把它return返回呢?
看了下面兄弟的回信,我們只能說他們一半是對的。
真正的原因是abi(應用程序二進制接口)。
ABI定義了與系統(tǒng)交互的細節(jié),如數(shù)據(jù)類型、大小和對齊方式;調用約定(控制函數(shù)的參數(shù)傳遞方向、可變長度處理、堆棧清理體以及如何接受返回值等);系統(tǒng)調用的編碼以及應用程序如何對操作系統(tǒng)進行系統(tǒng)調用系統(tǒng);以及采用完整ABI操作系統(tǒng)基本格式、程序庫等的第二代對象文件。完整的ABI,如英特爾二進制兼容標準(IBCs),允許支持它的操作系統(tǒng)上的程序在支持此ABI的其他操作系統(tǒng)上運行,而無需修改。
其他ABI標準化細節(jié)包括C名稱修改和同一平臺上編譯器之間的調用約定,但不包括跨平臺兼容性。
至于下面兄弟提到的eax save返回值,這只是X86的ABI規(guī)范。在其他CPU架構平臺(如PowerPC)中,實現(xiàn)是不同的!--PowerPC,返回值存儲在R3寄存器中
在函數(shù)內部調用輸出時可以直接用來打印出調用順序。1、 C/C編譯的程序所占用的內存分為以下幾個部分:1。堆棧由編譯器自動分配和釋放,存儲函數(shù)參數(shù)和局部變量的值。其操作類似于數(shù)據(jù)結構中的堆棧。2堆通常由程序員分配和釋放。如果程序員沒有釋放堆,那么在程序結束時,操作系統(tǒng)可能會恢復堆。注意,它在數(shù)據(jù)結構上與heap不同。分配方法類似鏈表,哈哈。三。全局區(qū)域(靜態(tài))-將全局變量和靜態(tài)變量的存儲放在一起。初始化的全局變量和靜態(tài)變量在一個區(qū)域中,未初始化的全局變量和未初始化的靜態(tài)變量在另一個相鄰區(qū)域中。-程序結束后,系統(tǒng)將發(fā)布4。文本常量區(qū)域-常量字符串放在這里。程序完成后,系統(tǒng)發(fā)布5。程序代碼區(qū)-函數(shù)體的二進制代碼。2、 例行程序: