1 記憶體分割槽模型以及new delete操作

2022-08-20 12:18:13 字數 1429 閱讀 7034

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

存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計

在程式編譯後,生成了exe可執行檔案,未執行前分為 2 個區域

(1)**區:存放 cpu 的機器指令

特點

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

特點:該區域的資料在程式結束後由作業系統釋放

include using

namespace

std;

//全域性變數

int g_a =10

;int g_b =10;//

const修飾的全域性常量

const

int c_g_a =10

;int

main()

全域性區與不在全域性區的區別

注:常量區中存放const 修飾的全域性變數字串變數

注意事項:

#include using

namespace

std;

int* func() //

形引數據也會放在棧區

intmain()

為什麼棧區資料不返回區域性變數的位址??

在c++中主要利用new在堆區中開闢資料

#include using

namespace

std;

int *func()

intmain()

c++通過new和delete實現動態記憶體的申請和釋放------->可以在乙個函式申請,另乙個函式釋放

#include using

namespace

std;

int *func()

void

test()

//利用new在堆區開闢陣列

void

test1()

for(int i=0;i<10;i++)

//釋放陣列的時候,要加 [ ] 才可以

delete

arr;

}int

main()

new 和 delete

按指定型別和大小在堆區動態的分配記憶體,如果建立成功則返回這塊記憶體空間的首位址,否則返回null

語法:指標變數名=new 型別名 (初值列表)

注:下標表示式1可以是任意正整數的表示式,其他下標必須是正整數常量表示式

釋放空間

語法:delete 指標變數名

刪除動態陣列:delete[ ]  指標變數名 ------>  [  ]表示釋放為多個物件分配的位址,無需說明要釋放物件個數

1 記憶體分割槽模型

區 所有的 都會放這裡 全域性區 棧 由編譯器管理記憶體的分配和釋放 堆 由程式設計師分配和釋放 區和全域性區都是程式執行前分配的兩個區域 全域性區 全域性變數 靜態變數 常量 const 只要沒有寫到函式體中的都是全域性變數 static靜態變數也會放到全域性區 常量 字串常量 雙引號引起來的都是...

C 核心程式設計 1 記憶體分割槽模型

c 程式在執行時,將記憶體大方向劃分為4個區域 區 存放函式體的二進位制 由作業系統進行管理的 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放程式結束時由作業系統 記憶體四區意義 不同區域存放的...

C 基礎 記憶體模型記憶體分割槽模型

區 存放函式體的二進位制 由作業系統進行管理 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 存放cpu執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...