變數,常量,靜態變數儲存的位置

2021-08-02 17:12:05 字數 1120 閱讀 5780

常見的儲存區域可分為:

1、棧由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

2、堆由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏,在程式結束後,作業系統會自動**。

3、自由儲存區

由malloc等分配的記憶體塊,它和堆是十分相似的,不過它是用free來釋放分配的記憶體。

4、全域性/靜態儲存區

全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

5、常量儲存區

這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改)。

例1:c語言程式

[cpp]

view plain

copy

intx;  

void

main()    

變數x儲存在記憶體哪個區域?

答:在採用段式記憶體管理

的架構中,

bss段

(bss segment)通常是指用來存放程式

中未初始化

的全域性變數

的一塊記憶體區域。

bss是英文block started by symbol的簡稱。bss段屬於靜態儲存區

。例2:

static全域性變數與普通全域性變數有什麼區別?

答:static全域性變數和普通全域性變數儲存區域相同,不同的是:

static全域性變數只在宣告此static全域性變數的檔案中有效;

普通全域性變數對整個源程式都有效,當此源程式包含多於乙個檔案的程式時,對其他檔案依然有效。

例3:static區域性變數與普通區域性變數的區別?

答:static區域性變數的儲存區為靜態儲存區,普通區域性變數的儲存區為棧;

static區域性變數生存週期為整個源程式,但是只能在宣告其的函式中呼叫,並且其值與上一次的結果有關;而普通區域性變數的生存週期為宣告其函式的週期,超過特定的範圍其值會被重新初始化;

static區域性變數如果未初始化其值預設為0,而普通區域性變數則不確定。

靜態儲存 動態儲存 靜態變數與動態變數

動態變數 int a 靜態變數 static int a 靜態變數,全域性動態變數都是靜態儲存,儲存在全域性資料區,在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態儲存變數是一直存在的,只會初始化一次。區域性動態變數是動態儲存,動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,...

變數 靜態變數

變數 全域性變數 外部變數 在函式外部定義,以及被本程式所有物件或函式引用。區域性變數 內部變數 由某個函式或物件建立,只能被內部引用,而無法被其他物件或函式引用。特點 該變數在全域性資料區分配記憶體 未經初始化的靜態全域性變數會被程式自動初始化為0 在函式體內宣告的自動變數的值是隨機的,除非它被顯...

靜態變數和常量的區別

共同點 1 static和const在編譯時直接分配記憶體。區別 1 本質 static是型別引用,const是例項引用。2 初始化 靜態變數的初始值必須是乙個常量。靜態初始值預設為0,而常量也預設為0 嗎?3 賦值 靜態變數的值在執行時可以更改賦值,而常量的值是不可改變的,執行一開始已經固定,之後...