C語言記憶體四區

2021-08-21 13:52:22 字數 1042 閱讀 4475

圖一:記憶體四區模型

流程說明

1、作業系統把物理硬碟**load到記憶體

2、作業系統把c**分成四個區

3、作業系統找到main函式入口執行

一:記憶體四區

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

1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap: 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os回   收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

3、資料區:主要包括靜態全域性區和常量區,如果要站在彙編角度細分的話還可以分為很多小的區。

全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區                             域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。 程式結束後有系統釋放

常量區 :常量字串就是放在這裡的。 程式結束後由系統釋放

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

二:相關**解讀

char*fa()

char*fb()

void main()

三:總結

1、主調函式分配的記憶體空間(堆,棧,全域性區)可以在被呼叫函式中使用,可以以指標作函式引數的形式來使用

2、被呼叫函式分配的記憶體空間只有堆區和全域性區可以在主調函式中使用(返回值和函式引數),而棧區卻不行,因為棧區函式體執行完之後

這個函式占用的記憶體編譯器自動幫你釋放了。

3、一定要明白函式的主被調關係以及主被調函式記憶體分配**,也就是後面接下幾篇總結的函式的輸入輸出記憶體模型。

4、sizeof測量的就是在棧區和堆區的字長,比如講,在乙個結構體中,存在乙個 static int a 的成員,sizeof是不會計算a的這四個位元組長度,因為static靜態資料成員是在資料區內,不在sizeof的測量範圍內。

c語言記憶體四區( )

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

C語言記憶體四區

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

C語言的記憶體四區

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