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

2022-08-10 07:18:14 字數 1546 閱讀 2166

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

記憶體四區意義:

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

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

**區:

​ 存放 cpu 執行的機器指令

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

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

全域性區:

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

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

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

示例:

//全域性變數

int g_a = 10;

int g_b = 10;

//全域性常量

const int c_g_a = 10;

const int c_g_b = 10;

int main()

列印結果:

總結:​棧區:

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

示例:

int * func()

int main()

堆區:

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

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

示例:

int* func()

int main()

總結:

堆區資料由程式設計師管理開闢和釋放

堆區資料利用new關鍵字進行開闢記憶體

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

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

​ 語法:new 資料型別

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

示例1: 基本語法

int* func()

int main()

示例2:開闢陣列

//堆區開闢陣列

int main()

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

//釋放陣列 delete 後加

delete arr;

system("pause");

return 0;

}

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

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

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

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

C 記憶體分割槽模型

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