c 之記憶體模型

2021-10-13 07:43:53 字數 1026 閱讀 1123

c++程式在執行時,將記憶體大方向劃分為4個區域

**區:存放函式體的二進位制**,由作業系統進行管理

(你寫的**都轉化成二進位制**)

全域性區:存放全域性變數和靜態變數以及常量

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

堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**

記憶體四區的意義:

不同區域存放的資料,賦予不同生命週期。

程式執行前:

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域:**區、全域性區

#include

using

namespace std;

//**區:存放函式體的二進位制**,由作業系統進行

//特點:共享 唯讀

//全域性區:靜態變數和全域性變數存放在此(包含了常量區、字串常量和其他常量)

//結束後資料由作業系統釋放

int b =10;

//在函式體外為全域性變數

intmain()

程式執行之後:棧區

#include

using

namespace std;

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

//由由編譯器自動分配釋放,存放函式的引數值,區域性變數,(形參)等

int*

func()

intmain()

堆區:

#include

using

namespace std;

//堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**

//由程式設計師決定分配釋放,程式結束時由作業系統**

//在c++中主要利用new在堆區開闢記憶體

int*

func()

intmain()

C 之記憶體模型 記憶體區域

2.malloc calloc realloc底層實現原理 2.2 calloc底層實現原理 2.3 realloc底層實現原理 2.4 分配虛擬記憶體的細節 2.5 free函式實現原理 3.new delete底層實現 4.相關面試題 3.應用 1 棧上的分配極為簡單,移動一下棧指標而已。2 棧...

C 物件模型之記憶體布局

c 虛函式表解析 虛函式按照其宣告順序放於表中 父類的虛函式在子類的虛函式前面 覆蓋的函式被放到了虛表中原來父類虛函式的位置 沒有被覆蓋的函式依舊 每個父類都有自己的虛表 子類的成員函式被放到了第乙個父類的表中 所謂的第乙個父類是按照宣告順序來判斷的 待補充 c 物件模型之記憶體布局 1 c 物件模...

c 學習之記憶體分割槽模型

c 程式在執行時,將記憶體大致分為4個取區域。區 存放函式體的二進位制 由作業系統進行管理。全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,則程式結束時由作業系統 在程式編譯後,生成了.exe可...