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修飾的全域常量 和 字串常量
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540570.html
標籤:C++
