国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中的內存分區介紹

2020-05-23 14:19:11
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C++中的內存分區介紹,C++的內存劃分為棧區、堆區、全局區/靜態區、字符串常量和代碼區,本文分別對他們一一說明,需要的朋友可以參考下

C++的內存劃分為棧區、堆區、全局區/靜態區、字符串常量和代碼區。

這里去掉自由存儲區,增加了代碼區,理由會在下面講到。

棧區:

由系統進行內存的管理。

說明:主要存放函數的參數以及局部變量。棧區由系統進行內存管理,在函數完成執行,系統自行釋放棧區內存,不需要用戶管理。整個程序的棧區的大小可以在編譯器中由用戶自行設定,默認的棧區大小為3M。

全局/靜態區:

全局、靜態數據存放在一起的,初始化的全局變量和靜態變量是在一起的。未初始化的全局變量和靜態變量是在相鄰的空間中。

說明:全局變量和靜態全局變量的存儲方式是一致的,但是其區別在于,全局變量在整個源代碼中都可以使用,而靜態全局變量只能在當前文件中有效。比如我們的一個程序有5個文件,那么某個文件中申請了靜態全局變量,這個靜態全局變量只能在當前文件中使用,其他四個文件均不可以使用。而某個文件中申請了全局變量,那么其他四個文件中都可以使用該全局變量(只需要通過關鍵字extern申明一下就可以使用了)。事實上static改變了變量的作用范圍。

字符串常量區:

存放字符串常量,程序結束后,由系統進行釋放。比如我們定義char * p = “Hello World”; 這里的“Hello World”就是在字符串常量中,最終系統會自動釋放。

代碼區:

存放程序體的二進制代碼。比如我們寫的函數,都是在代碼區的。

堆區:

由用戶手動申請,手動釋放。在C中使用malloc,在C++中使用new(當然C++中也可以使用malloc)。

說明:new操作符本質上還是使用了malloc進行內存的申請,因此我將自由存儲區和堆區都說成堆區,不過兩者還是有很大的差別。

1)malloc是C語言中的函數,而new是C++中的操作符。

2)malloc申請之后返回的類型是VOID*,而new返回的指針帶有類型。

3)malloc只負責內存的分配而不會調用類的構造函數,而new不僅會分配內存,而且會自動調用類的構造函數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涪陵区| 成都市| 翼城县| 石嘴山市| 万全县| 云浮市| 仙游县| 班玛县| 正定县| 卢氏县| 克拉玛依市| 长汀县| 吉隆县| 陈巴尔虎旗| 四会市| 威信县| 泾川县| 千阳县| 宜兴市| 平山县| 旌德县| 宜兰县| 灵寿县| 明水县| 个旧市| 中卫市| 光泽县| 土默特右旗| 天长市| 潼南县| 广河县| 遂昌县| 郁南县| 时尚| 南投市| 思南县| 翼城县| 舒城县| 信阳市| 荆门市| 蓬溪县|