所有的自動變數以及函式呼叫時所需要儲存的資訊(返回位址、函式呼叫前各暫存器的值等)都儲存在棧上。每次呼叫函式時,棧會隨著函式的呼叫而生長,隨著函式呼叫結束而消亡。
自動變數有3種儲存方式:一是儲存在資料段或者bss段(靜態區域性變數);一是儲存在暫存器裡(暫存器變數);一是儲存在棧中(一般自動變數)。由於絕大多數自動變數儲存在棧中,所以自動變數的作用域往往只在函式內,其生命週期也往往只持續到函式呼叫的結束。
注:c語言程式設計中,一種典型的錯誤就是將乙個指向區域性變數的指標作為函式的返回值返回。
示例:將乙個指向區域性變數的指標作為函式的返回值返回
local.c
#include
#include
char *combine(char *str1,char *str2)
int main(void)
[root@localhost yuan]# ./local
hello world
[root@localhost untitled-1]# ./local
hello world
以及在vc++6.0下也可以正確執行
這些應該是個巧合~
C程式儲存布局
乙個由 c c 編譯的程式占用的記憶體 memory 分為以下幾個部分 1.程式 區 text 即 段 text 存放函式體的二進位制 段由程式中執行的機器 組成。在c語言中,程式語句進行編譯後,形成機器 在執行程式的過程中,cpu的程式計數器指向 段的每一條機器 並由處理器依次執行。2.文字常量區...
c程式儲存空間布局
摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...
c程式儲存空間布局
摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...