中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中內存分區及作用是什么

發布時間:2023-04-20 11:27:04 來源:億速云 閱讀:212 作者:iii 欄目:開發技術

本篇內容主要講解“C++中內存分區及作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++中內存分區及作用是什么”吧!

一、文本區(Text Segment)/代碼區

也稱為代碼段,存放程序代碼。在程序編譯以后,代碼被編譯成機器碼,并保存在Text Segment中。它通常是只讀的,防止程序出現意外的修改。同時,代碼段也是可共享的。多個相同的程序可共享同一份代碼,從而節省內存空間。

二、數據區(Data Segment)/全局區

也稱為靜態數據區,存放定義的全局變量、靜態變量等數據。數據區也分為兩個部分,即初始化數據段和未初始化數據段。初始化數據段存放已經初始化過的全局變量和靜態變量。未初始化數據段存放未經初始化的全局變量和靜態變量,該區域的值默認為0。

三、棧區(Stack Segment)

棧區存放函數調用時的局部變量、參數等數據,系統根據函數調用的嵌套情況來自動管理棧區。當一個函數被調用時,函數的參數和返回地址被壓入棧中,然后分配一定的棧空間存儲局部變量。當函數返回時,返回值和之前壓入棧中的返回地址被取出,棧空間被釋放。在棧區分配變量和空間時,會從高地址往低地址分配內存。這是因為棧區存儲數據的方式類似于數據的堆疊,后壓入的數據會被放在先前數據的上面,而先壓入的數據會被放在下面。每次分配棧內存時,棧指針會向下移動,每次釋放棧內存時,棧指針會向上移動。(自頂向下分配內存)

四、堆區(Heap Segment)

動態分配內存的區域,程序員在程序運行時可以向操作系統申請一定大小的內存。在堆區分配的內存由程序員負責管理,使用完畢后,程序員需要調用釋放內存系統來釋放內存,以防止內存泄漏的發生。在堆區分配內存時,會從低地址往高地址分配,因為操作系統在分配空間時會記錄哪些空間已經被分配出去。所以在分配時需要先查找堆區中未被分配的內存空間,并且需要記錄本次分配所占用的空間大小和地址。(自底向上分配內存)

舉例

//全局區
int global_variable = 0;//全局變量
static int static_variable = 1;//靜態變量
const int global_const_variable = 10;//全局常量
int main() {
	//棧區
    int local_variable = 2;
	const int const_variable = 0;
	//堆區
	int* ptr = (int*)malloc(sizeof(int));//c語言形式在堆區 1 個 int 類型變量的內存空間	
	free(ptr);// 釋放指針 ptr 指向的內存空間
	int* p = new int[10]; // C++在堆區申請 10 個 int 類型變量的內存空間	
	delete[] p; // 釋放指針 p 指向的內存空間
    return 0;
}

那么在編譯后,程序將被劃分為四個區域:

代碼區:

存放main函數的機器碼。

全局區:

存放定義的全局變量global_variable和靜態變量static_variable。其中,global_variable存放在初始化數據段,static_variable存放在未初始化數據段。

堆區:

在程序運行過程中,可以使用mallocnew函數向堆區申請一定大小的內存空間。

棧區: 存放main函數的局部變量local_variable、函數參數和返回地址等數據。

到此,相信大家對“C++中內存分區及作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

克什克腾旗| 萝北县| 青龙| 元朗区| 金华市| 湟中县| 社旗县| 成都市| 偏关县| 从江县| 保定市| 福贡县| 女性| 乌兰察布市| 湛江市| 独山县| 昌江| SHOW| 安泽县| 阿克陶县| 宁德市| 惠州市| 嘉兴市| 黄浦区| 台东县| 东莞市| 壶关县| 蒙山县| 衢州市| 广汉市| 泗洪县| 宣汉县| 高安市| 甘德县| 广德县| 惠东县| 城步| 利辛县| 寿光市| 固原市| 乌兰察布市|