C C 中變數的儲存位置

2021-07-02 02:09:03 字數 926 閱讀 8224

1、首先,講下 「堆 heap」 和 「棧 stack」 的區別:

乙個由 c/c++編譯過的程式占用的記憶體分為一下幾個部分

(1)、棧區 stack :由編譯器自動分配釋放,

存放函式的引數值,區域性變數的值等。

這個棧的操作方式類似於資料結構中的棧。

(2)、堆區 heap :一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**,

注意它與資料結構中的堆是兩回事,分配方式類似於鍊錶。

(3)、全域性區(靜態去)static : 全域性變數和靜態變數的儲存是放在一塊的。

初始化的全域性變數和靜態變數在一塊區域,

未初始化的全域性變數和靜態變數又放在相鄰的另一塊區域中。

程式結束後由系統釋放。

(4)、文字常量區  : 常量字串放在這裡。

程式結束後由系統釋放。

(5)、程式**區 : 存放函式體的2進製**。

2、例子程式 

這是乙個前輩寫的,非常詳細 

int a = 0; 全域性初始化區 

char *p1; 全域性未初始化區 

main() 

{ int b;// 棧 

char s = "abc"; //棧 

char *p2; //棧 

char *p3 = "123456"; 123456\0";//在常量區,p3在棧上。 

static int c =0; //全域性(靜態)初始化區 

p1 = (char *)malloc(10); 

p2 = (char *)malloc(20); 

//分配得來得10和20位元組的區域就在堆區。 

strcpy(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成乙個地方。 

原文出處:c/c++中變數的儲存位置

c c 變數的儲存位置

變數的記憶體一般分為5部分 棧區stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數等,對棧的操作方式類似於資料結構中的棧 堆區heap 一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由os揮手,但是它與資料結構中的堆是兩回事,分配方式類似於鍊錶。全域性區 靜態區 sati...

變數儲存位置

1 首先,講下 堆 heap 和 棧 stack 的區別 乙個由 c c 編譯過的程式占用的記憶體分為一下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放區域性變數 2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配...

C C 中變數的儲存型別

變數可能存放在三個位置 普通記憶體 靜態儲存區 程式執行堆疊 硬體暫存器。在函式體外定義的和在函式體內定義的並宣告為static型別的儲存在靜態儲存區中,在程式執行之前建立,在程式退出後銷毀。在函式體內定義的預設為 auto 自動變數,儲存在堆疊中,函式返回後,這些變數被銷毀。關鍵字register...