C++核心編程 本階段主要針對C++==面向對象==編程技術做詳細講解,探討C++中的核心和精髓。 1 記憶體分區模型 C++程式在執行時,將記憶體大方向劃分為4個區域 代碼區:存放函數體的二進位代碼,由操作系統進行管理的 全局區:存放全局變數和靜態變數以及常量 棧區:由編譯器自動分配釋放, 存放函數的 ...
C++核心編程
本階段主要針對C++面向對象編程技術做詳細講解,探討C++中的核心和精髓。
1 記憶體分區模型
C++程式在執行時,將記憶體大方向劃分為4個區域
- 代碼區:存放函數體的二進位代碼,由操作系統進行管理的
- 全局區:存放全局變數和靜態變數以及常量
- 棧區:由編譯器自動分配釋放, 存放函數的參數值,局部變數等
- 堆區:由程式員分配和釋放,若程式員不釋放,程式結束時由操作系統回收
記憶體四區意義:
不同區域存放的數據,賦予不同的生命周期, 給我們更大的靈活編程
1.1 程式運行前
在程式編譯後,生成了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 a = 10;
int b = 10;
//列印地址
cout << "局部變數a地址為: " << (int)&a << endl;
cout << "局部變數b地址為: " << (int)&b << endl;
cout << "全局變數g_a地址為: " << (int)&g_a << endl;
cout << "全局變數g_b地址為: " << (int)&g_b << endl;
//靜態變數
static int s_a = 10;
static int s_b = 10;
cout << "靜態變數s_a地址為: " << (int)&s_a << endl;
cout << "靜態變數s_b地址為: " << (int)&s_b << endl;
cout << "字元串常量地址為: " << (int)&"hello world" << endl;
cout << "字元串常量地址為: " << (int)&"hello world1" << endl;
cout << "全局常量c_g_a地址為: " << (int)&c_g_a << endl;
cout << "全局常量c_g_b地址為: " << (int)&c_g_b << endl;
const int c_l_a = 10;
const int c_l_b = 10;
cout << "局部常量c_l_a地址為: " << (int)&c_l_a << endl;
cout << "局部常量c_l_b地址為: " << (int)&c_l_b << endl;
system("pause");
return 0;
}
列印結果:
總結:
- C++中在程式運行前分為全局區和代碼區
- 代碼區特點是共用和只讀
- 全局區中存放全局變數、靜態變數、常量
- 常量區中存放 const修飾的全局常量 和 字元串常量