最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中內(nèi)存分區(qū)及其作用分析

 更新時間:2023年04月20日 10:45:45   作者:何曾參靜謐  
C++內(nèi)存分區(qū)包括棧區(qū)、堆區(qū)、全局靜態(tài)區(qū)、常量區(qū),各自負責(zé)不同的數(shù)據(jù)存儲和回收,棧區(qū)主要用于存放函數(shù)局部變量和參數(shù),堆區(qū)用于動態(tài)分配內(nèi)存,全局靜態(tài)區(qū)用于存放全局靜態(tài)變量和靜態(tài)成員變量,常量區(qū)用于存放常量和字符串常量

術(shù)語

內(nèi)存四大區(qū):

  • 代碼區(qū):存放函數(shù)體的二進制代碼,由操作系統(tǒng)進行管理的
  • 全局區(qū):存放全局變量和靜態(tài)變量以及常量
  • 棧區(qū):由編譯器自動分配釋放, 存放函數(shù)的參數(shù)值,局部變量等
  • 堆區(qū):由程序員分配和釋放,若程序員不釋放,程序結(jié)束時由操作系統(tǒng)回收

內(nèi)存的低地址與高地址:

低地址:存放在內(nèi)存中地址小的位置(存放中的變量和數(shù)據(jù))

高地址:存放在內(nèi)存中地址大的位置(存放程序指令)

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

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

二、數(shù)據(jù)區(qū)(Data Segment)/全局區(qū)

也稱為靜態(tài)數(shù)據(jù)區(qū),存放定義的全局變量、靜態(tài)變量等數(shù)據(jù)。數(shù)據(jù)區(qū)也分為兩個部分,即初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段。初始化數(shù)據(jù)段存放已經(jīng)初始化過的全局變量和靜態(tài)變量。未初始化數(shù)據(jù)段存放未經(jīng)初始化的全局變量和靜態(tài)變量,該區(qū)域的值默認(rèn)為0。

三、棧區(qū)(Stack Segment)

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

四、堆區(qū)(Heap Segment)

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

舉例

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

那么在編譯后,程序?qū)⒈粍澐譃樗膫€區(qū)域:

代碼區(qū):

存放main函數(shù)的機器碼。

全局區(qū):

存放定義的全局變量global_variable和靜態(tài)變量static_variable。其中,global_variable存放在初始化數(shù)據(jù)段,static_variable存放在未初始化數(shù)據(jù)段。

堆區(qū):

在程序運行過程中,可以使用mallocnew函數(shù)向堆區(qū)申請一定大小的內(nèi)存空間。

棧區(qū): 存放main函數(shù)的局部變量local_variable、函數(shù)參數(shù)和返回地址等數(shù)據(jù)。

到此這篇關(guān)于C++中內(nèi)存分區(qū)及其作用分析的文章就介紹到這了,更多相關(guān)C++內(nèi)存分區(qū)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 編輯器寫C語言輸出中文亂碼問題及解決

    編輯器寫C語言輸出中文亂碼問題及解決

    這篇文章主要介紹了編輯器寫C語言輸出中文亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析

    OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析

    這篇文章主要介紹了OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析,需要的朋友可以參考下
    2015-01-01
  • c++基礎(chǔ)語法:構(gòu)造函數(shù)與析構(gòu)函數(shù)

    c++基礎(chǔ)語法:構(gòu)造函數(shù)與析構(gòu)函數(shù)

    構(gòu)造函數(shù)用來構(gòu)造一個對象,主要完成一些初始化工作,如果類中不提供構(gòu)造函數(shù),編譯器會默認(rèn)的提供一個默認(rèn)構(gòu)造函數(shù)(參數(shù)為空的構(gòu)造函數(shù)就是默認(rèn)構(gòu)造函數(shù)) ;析構(gòu)函數(shù)是隱式調(diào)用的,delete對象時候會自動調(diào)用完成對象的清理工作
    2013-09-09
  • C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    不定參數(shù)是指函數(shù)可以接收不確定個數(shù)的參數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中不定參數(shù)?...?的語法以及函數(shù)封裝的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C語言關(guān)鍵字union的定義和使用詳解

    C語言關(guān)鍵字union的定義和使用詳解

    這篇文章主要介紹了C語言關(guān)鍵字union的定義和使用詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • C++實現(xiàn)十進制數(shù)轉(zhuǎn)為其它進制數(shù)

    C++實現(xiàn)十進制數(shù)轉(zhuǎn)為其它進制數(shù)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)十進制數(shù)轉(zhuǎn)為其它進制數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言求解無向圖頂點之間的所有最短路徑

    C語言求解無向圖頂點之間的所有最短路徑

    這篇文章主要為大家詳細介紹了C語言求解無向圖頂點之間的所有最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++實現(xiàn)回文串判斷的兩種高效方法

    C++實現(xiàn)回文串判斷的兩種高效方法

    文章介紹了兩種判斷回文串的方法:解法一通過創(chuàng)建新字符串來處理,解法二在原字符串上直接篩選判斷,兩種方法都使用了雙指針法,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2025-03-03
  • C語言字符串快速壓縮算法代碼

    C語言字符串快速壓縮算法代碼

    這篇文章主要介紹了C語言字符串快速壓縮算法代碼,將字符串中連續(xù)出席的重復(fù)字母進行壓縮,其主要的壓縮字段的格式為”字符重復(fù)的次數(shù)+字符”。有需要的小伙伴參考下吧。
    2015-03-03
  • QT實現(xiàn)多文件拖拽獲取路徑的方法

    QT實現(xiàn)多文件拖拽獲取路徑的方法

    這篇文章主要為大家詳細介紹了QT實現(xiàn)多文件拖拽獲取路徑的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

平阳县| 蓬溪县| 彭山县| 永胜县| 金乡县| 托里县| 上杭县| 开原市| 财经| 蚌埠市| 施秉县| 太谷县| 桓仁| 侯马市| 山东省| 沂源县| 台北县| 安平县| 威信县| 深州市| 榆中县| 株洲县| 昌黎县| 舞阳县| 科技| 东兰县| 图片| 阿尔山市| 汉源县| 信丰县| 安康市| 周口市| 炉霍县| 昌黎县| 北辰区| 长春市| 嵊泗县| 泰顺县| 宁德市| 调兵山市| 镇赉县|