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