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...