真正的程序內存佈局:代碼段、數據段、堆空間、棧空間 (拒絕誤導、拒絕錯誤概念)

內存空間的佈局

每個應用程序內存都應有自己獨立的內存空間,其內存空間一般都有以下幾大區域

1、代碼段(代碼區)

用於存放代碼(機器碼),只讀

2、數據段(全局區)

用於存放全局變量等(static)
整個程序運行中都存在,除非關閉進程

#include <iostream>
using namespace std;

//全局變量
int g_age = 10;

int main() {
	return  0;
}

g_age 就是全局變量

3、棧空間

每調用一個函數就會給它分配一段連續的棧空間,等函數調用完畢後會自動回收這段棧空間(注意:如果申請了堆空間,堆空間需要手動銷燬)

#include <iostream>
using namespace std;


int g_age = 10;
// 調用test 開闢連續的棧空間
void test() {
	int a = 1;
	int b = 2;
	int c = a + b;
}

int main() {
	// 調用時自動分配,調用後自動回收
	test();
	return  0;
}

4、堆空間

使用場景
在程序運行過程,爲了能夠自由控制內存的生命週期、大小會經常使用堆空間的內存


四種堆棧佈局(使用語言:c++、x86環境)

1、 創建對象(棧),對象內部申請棧空間 ☆

對象內部申請的空間,隨對象一起回收

2、 創建對象(棧),對象內部申請堆空間 ☆

對象內部申請的空間,由對象內部回收

3、 創建指針與對象(棧-堆),對象內部申請棧空間 ☆

4、 創建指針與對象(棧-堆),對象內部申請堆空間 ☆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章