C語言的記憶體四區

2021-09-24 21:16:43 字數 1177 閱讀 6193

在執行乙個c語言程式時,此程式將擁有唯一的「記憶體四區」——棧區、堆區、全域性區、**區.

一、棧區

由編譯器自動分配釋放,存放函式的形參、區域性變數等。當函式執行完畢時自動釋放。

#includechar *getmem()

void main()

printf("tmp:%s\n", tmp);//輸出tmp:

system("pause");

return ;

}

記憶體分析:

二、堆區

一般由程式設計師手動分配釋放(動態記憶體申請與釋放),若程式設計師不釋放,程式結束時可能由作業系統**。

#include char *getmem(int num)

return p1;

}void main()

strcpy(tmp, "111222"); //向tmp做指向的記憶體空間中copy資料,注意不是向指標變數tmp中

printf("tmp:%s\n", tmp);//輸出tmp:111222

system("pause");

return ;

}

記憶體分析:

三、全域性區

用於存放全域性變數和靜態變數, 裡面細分有乙個常量區,字串常量和其他常量也存放在此。該區域是在程式結束後由作業系統釋放。

#include char * getstr1()

char *getstr2()

void main()

記憶體分析:

*函式呼叫:

1.在程式未執行結束時,main函式裡分配的空間均可以被其他自定義函式訪問;

2.自定義函式若在堆區(malloc動態分配記憶體等)或全域性區(字串常量等)分配的記憶體,即便此函式結束,這些記憶體空間也不會被系統**,記憶體中的內容可以被其他自定義函式和main函式使用

c語言記憶體四區( )

圖1 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方 式類似於資料結...

C語言記憶體四區

圖一 記憶體四區模型 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 一 記憶體四區 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方...

C語言記憶體四區

1 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 一般由程式設計師分配並釋放,若程式設計師不釋放,程式結束時可能由作業系統 3 資料區 主要包括靜態全域性區和常量區。4 區 存放函式體的二進位制 分清楚變數的記憶體處於哪個區對於程式設計至關重要。乙個典型的,卻比較晦澀的例...