C++——內存分區

前言

C++將內存方向劃分爲4個區域,代碼區、全局區、棧區、堆區。每個區存放的數據,都賦予不同的生命週期,給予程序員更大的靈活編程。

解釋四區

  • 程序運行前

在程序編譯後,生成了exe可執行程序,在未執行該程序前內存分爲下面兩個區域。

代碼區:
1、存放CPU指行的機器指令(就是我們寫的代碼,只不過被翻譯成立0101);
2、代碼區是共享的,共享的目的是對於頻繁被執行的程序,只需在內存中有一份代碼即可;
3、代碼區是隻讀的,使其只讀的原因是防止程序意外修改了他的指令;

全局區:
1、全局變量和靜態變量存放在此;
2、全局區還包含常量區、字符串常量、const修飾的全局變量;
3、該區域的數據在程序結束後由操作系統釋放;

  • 程序運行後

程序運行後,內存又開闢了另外兩個區。

棧區:
1、由編譯器自動分配釋放,存放函數參數、局部變量等。
2、注意:不要返回局部變量的地址,因爲棧區的數據在函數執行完後自動釋放。

堆區:
1、由程序員分配釋放,C++中主要利用new在堆區開闢內存。
2、開闢的內存由指針進行接收,如:*p = new int(666);
3、開闢內存最好手動收回,用delete關鍵字。

代碼區

存放函數體的二進制代碼,由操作系統進行管理。

全局區

存放全局變量、靜態變量、常量。

棧區

存放函數的參數值、局部變量、const修飾的局部變量,由編譯器自動分配釋放。

堆區

由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統回收。

int *p = new int(10);
delete p;
int *q = new int[10];//定義大小爲10的數組
delete[] q;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章