堆區 棧區 靜態區 常量區還有???

2021-09-21 18:11:50 字數 952 閱讀 9247

常見的儲存區域可分為:

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

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

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

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

是由系統控制,指程式中的函式編譯後cpu指令,函式的位址,程式的入口位址,程式的名字 (函式的名稱也是乙個指標,可以通過查詢函式名稱所處的記憶體位址,查詢函式存放的區域)。

int x;  

void main()

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

答:在採用段式記憶體管理的架構中,bss段(bss segment)通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。

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

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

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

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

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

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

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

更多細節可參考:

c 棧區 堆區 常量區

c 中棧區 堆區 常量區 由一道面試題目而學習 2009 04 28 21 01 include void main 對應的彙編 10 a c 1 00401067 8a 4d f1 mov cl,byte ptr ebp 0fh 0040106a 88 4d fc mov byte ptr ebp...

C 中棧區 堆區 常量區

c 中棧區 堆區 常量區 由一道面試題目而學習 2009 04 28 21 01 include void main 對應的彙編 10 a c 1 00401067 8a 4d f1 mov cl,byte ptr ebp 0fh 0040106a 88 4d fc mov byte ptr ebp...

靜態儲存區 堆區和棧區

記憶體分配有三種 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時...