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

2021-10-25 10:17:33 字數 2128 閱讀 2841

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

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

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

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

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

記憶體四區意義:

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

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

**區

存放cpu執行的機器指令

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可

**區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令

全域性區

全域性變數和靜態變數存放在此

全域性區還包含了常量區,字串常量和其他常量也存放在此.

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

#include

using

namespace std;

//全域性變數

int g_a =10;

int g_b =10;

//全域性常量

const

int c_g_a =10;

const

int c_g_b =10;

intmain()

輸出結果:

結論

●c++中在程式執行前分為全域性區和**區

●**區特點是共享和唯讀

●全域性區中存放全域性變數、靜態變數、常量

●常量區中存放const修飾的全域性常量和字串常量

棧區

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

注意事項:不要返回區域性變數的位址,棧區開闢的資料由編譯器自動釋放

#include

using

namespace std;

//棧區資料注意事項----不要返回區域性變數的位址

//棧區的資料由編譯器管理開闢和釋放

int*

func()

intmain()

輸出:

10

2056374768

堆區

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

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

#include

using

namespace std;

int*

func()

intmain()

輸出:

10

10

c++中利用new操作符在堆區開闢資料

堆區開闢的資料,由程式設計師手動開闢,手動釋放,釋放利用操作符delete

語法:new 資料型別

利用new建立的資料,會返回該資料對應的型別的指標

#include

using

namespace std;

的基本用法

int*

func()

void

test01()

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

void

test02()

for(

int i =

0; i <

10; i++

)//釋放堆區陣列

delete

arr;

}int

main()

C 核心程式設計(一) 記憶體分割槽模型

c 程式在執行時,將記憶體大方向劃分為4個區域 記憶體四區意義 不同區域存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計 在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域 區 存放 cpu 執行的機器指令 區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份 ...

c 核心程式設計 1 記憶體模型

記憶體四區的意義 不同區域存放不同的資料,賦予不同的生命週期,靈活程式設計 區 存放cpu執行的機器指令 區是共享的,共享的目的是對於頻繁執行的程式,只需要在記憶體中有乙份 即可 多次載入只有乙份 區是唯讀的,使其唯讀的原因是防止程式意外的修改了它的指令 全域性區 全域性變數和靜態變數 常量區 字串...

1 記憶體分割槽模型

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