C++學習筆記——內存分區

#include <iostream>

using namespace std;

#define FLAG 2
/*
 內存分區模型:
 C++程序在執行時,將內存大方向分爲4個區
 1、代碼區:存放函數體的二進制代碼,由操作系統進行管理
 2、全局區:存放全局變量和靜態變量以及常量
 3、棧  區:由編譯器自動分配釋放,存放函數的參數值,局部變量等
 4、堆  區:由程序員分配和釋放,若程序員不釋放,程序結束時有操作系統回收

 內存分區的意義:
 不同區域存放的互數據,賦予不同的生命週期,給我們更大的靈活編程
*/

/*
 1、代碼區(代碼運行前)
    存放CPU執行的機器指令
	特點:
	共享:目的是對於頻繁被執行的程序,只需要在內存中有一份代碼即可
	只讀:爲了防止程序意外的修改了他的指令
*/

/*
 2、全局區(代碼運行前)
    全局區存放全局變量,靜態變量,常量(這裏指字符串常量、const修飾的全局變量)
	該區域的數據在程序結束後由操作系統釋放
*/

/*
 3、棧區(程序運行後)
    由編譯器自動分配釋放,存放函數的參數值,局部變量等
	Tip:不返回局部變量的地址,棧區開闢的數據由編譯器自動釋放
*/
int * fun1()
{
	int a = 10;//局部變量,存放棧區
	return &a; //返回局部變量地址
}
/*
 4、堆區(程序運行後)
    C++中主要利用new在堆區開闢內存
*/
int * fun2()
{
	int *p = new int(10);//返回地址
	return p;
}
int main()
{
#if 1==FLAG	//測試棧區
	int * p = fun1();
	cout << *p << endl;//第一次打印數據正確,是因爲編譯器做了保留
	cout << *p << endl;//第二次數據就不保留了

#elif 2==FLAG	
	int *p = fun2();
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;

#endif
	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章