C語言記憶體四區

2022-06-26 09:54:12 字數 595 閱讀 9870

1、棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。

2、堆區: 一般由程式設計師分配並釋放,若程式設計師不釋放,程式結束時可能由作業系統** 。

3、資料區:主要包括靜態全域性區和常量區。

4、**區:存放函式體的二進位制**。

分清楚變數的記憶體處於哪個區對於程式設計至關重要。

乙個典型的,卻比較晦澀的例子:

int

main()

該**可以通過編譯,但無法執行完。程式會死掉。

為什麼?

char * f = "abcde";

該語句分配的字串位於"常量區"。所以,只可讀,不可改。因此報錯。

這段**比較「恐怖」的地方就是,該**可以通過編譯,卻無法執行完。

這段**如果做一下小小的轉換:

int

main()

此處: char f = "abcde";

該"abcde"位於棧區。所以可以被修改。

c語言記憶體四區( )

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

C語言記憶體四區

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

C語言的記憶體四區

在執行乙個c語言程式時,此程式將擁有唯一的 記憶體四區 棧區 堆區 全域性區 區.一 棧區 由編譯器自動分配釋放,存放函式的形參 區域性變數等。當函式執行完畢時自動釋放。includechar getmem void main printf tmp s n tmp 輸出tmp system paus...