變數的生存期

2021-08-13 08:43:37 字數 1025 閱讀 1234

標籤(空格分隔): c 雙學位高階語言程式設計 c函式

這節課我們要學習以下幾個問題:

編譯器是如何區分不同作用域中的同名變數的呢?

編譯器將它們分配給了不同的位址,所以能夠區分。

程式執行時,編譯器是如何為程式分配記憶體空間的呢?

儲存區分類

記憶體資料分類(線性從上到下)

記憶體低位址端

唯讀儲存區

**區唯讀儲存區

常量儲存區

靜態儲存區

動態儲存區

堆動態儲存區

……動態儲存區

棧記憶體高位址端

變數的儲存型別(就是編譯器為變數分配記憶體的方式)決定了變數的生存期。靜態儲存區中的變數生存期是整個函式,動態儲存區中的變數生存期是定義它的語句塊

儲存區分類

功能唯讀儲存區

存放機器**和常量等唯讀資料

靜態儲存區

存放全域性變數和靜態變數(靜態——初始化發生在程式編譯或鏈結時,程式執行時不發生

動態儲存區

包括堆和棧,其中,棧用於儲存函式呼叫時的返回位址、函式形參、區域性變數等資訊(動態)——初始化發生在程式呼叫和執行時

c語言有四種變數儲存型別,格式如下

儲存型別 資料型別 變數名
c儲存型別關鍵字有

自動變數是使用最廣泛的變數,所以c語言將其定為了預設型別,就是未宣告儲存型別時,預設定義變數為auto型;靜態變數儲存在靜態儲存區內,,僅僅在程式編譯時初始化一次,如果沒有定義初始化為何值,便初始化為0.不管是靜態區域性變數還是靜態全域性變數,生存期都是整個程式,只是作用域不同而已;外部變數是一種宣告方式,如果全域性變數想在定義點之前或者其他檔案中訪問,就需要將變數宣告(不是定義)為extern型別,告訴編譯器,就像函式的宣告一樣;暫存器變數是將變數儲存在cpu中的暫存器內,這適用於使用頻率較高的變數,能使程式更小、執行速度更快,但是現代編譯器一般都會自動識別轉化合適的變數,使其轉為暫存器變數,提高執行速度,所以一般不需要使用者自己宣告暫存器變數

變數生存期

統計共呼叫counter 函式多少次。count.c檔案 include intmain mycounter.c counter 函式 void counter 函式宣告 void counter 執行結果為 count 1,結果不對。因為counter 函式中的count是區域性變數,自動儲存,每...

靜態生存期和動態生存期

靜態生存期 定義 如果某乙個物件的生存期和程式的執行的生存期一樣,則這個物件具有靜態生存期。關鍵字 static 特點靜態變數不會隨著每次函式的呼叫產生乙個新的副本,也不會隨著函式返回而失效。第n次呼叫函式時,靜態變數的值為第n 1次呼叫的靜態變數的值,依次類推!也就是說靜態變數 第一次賦值有效,也...

export Shell環境和變數生存期

test value export test 這樣的指令碼執行完後,test實際上是不存在的。接著看下面的 test value export test bash 這裡在指令碼最後一行再開乙個子shell,該shell應該是指令碼檔案所在shell的子shell,這個指令碼執行完後,是可以看到tes...