傳智播客C語言提高 記憶體四區

2021-09-26 11:51:20 字數 1383 閱讀 8445

知識點

記憶體四區的建立流程

流程說明

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

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

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

記憶體四區的建立流程

如果兩個靜態變數的值一樣,在c++中編譯器會自動優化,將兩個變數的位址搞成一樣的

棧的開口方向可以測試出來,測試release和debug一般不一樣;一般認為開口向下,棧開口向下是為了壓棧的過程中記憶體溢位(從大到小壓),

char[128]無論棧開口向上還是向下,buf都是向上的(向小向大變化),棧的生長方向和buf的增長方向是兩個不同的概念;

鐵律1:指標是一種資料型別

1) 指標也是一種變數,占有記憶體空間,用來儲存記憶體位址

測試指標變數占有記憶體空間大小

2)*p操作記憶體

在指標宣告時,*號表示所宣告的變數為指標

在指標使用時,號表示 操作 指標所指向的記憶體空間中的值

p相當於通過位址(p變數的值)找到一塊記憶體;然後操作記憶體

p放在等號的左邊賦值(給記憶體賦值)

p放在等號的右邊取值(從記憶體獲取值)

3)指標變數和它指向的記憶體塊是兩個不同的概念

//含義1 給p賦值p=0x1111; 只會改變指標變數值,不會改變所指的內容;p = p +1; //p++

//含義2 給p賦值p=『a』; 不會改變指標變數的值,只會改變所指的記憶體塊的值

//含義3 =左邊p 表示 給記憶體賦值, =右邊p 表示取值 含義不同切結!

//含義4 =左邊char *p

//含義5 保證所指的記憶體塊能修改

4)指標是一種資料型別,是指它指向的記憶體空間的資料型別

含義1:指標步長(p++),根據所致記憶體空間的資料型別來確定

p++=(unsigned char )p+sizeof(a);

結論:指標的步長,根據所指記憶體空間型別來定。

注意: 建立指標指向誰,就把把誰的位址賦值給指標。圖和**和二為一。

不斷的給指標變數賦值,就是不斷的改變指標變數(和所指向記憶體空間沒有任何關係)。

使用malloc申請記憶體之後一定要先判斷是否申請記憶體成功,因為很多函式或操作符的規定指標不能指向null

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 區 存放函式體的二進位制 分清楚變數的記憶體處於哪個區對於程式設計至關重要。乙個典型的,卻比較晦澀的例...