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

C++內(nèi)存分區(qū)模型超詳細(xì)講解

 更新時(shí)間:2022年11月29日 14:02:13   作者:溪午聞璐  
在了解內(nèi)存分區(qū)之前,我們先來(lái)聊一聊為什么要進(jìn)行內(nèi)存分區(qū)。在進(jìn)行了內(nèi)存分區(qū)之后,在不同的區(qū)域存放的數(shù)據(jù),會(huì)有不同的生命周期,從而會(huì)讓程序員的編程變得更加靈活

1、內(nèi)存分區(qū)模型

C++程序在執(zhí)行時(shí),將內(nèi)存大方向劃分為4個(gè)區(qū)域

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

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

不同區(qū)域存放的數(shù)據(jù),賦予不同的生命周期, 給我們更大的靈活編程

2、程序運(yùn)行前

在程序編譯后,生成了exe可執(zhí)行程序,未執(zhí)行該程序前分為兩個(gè)區(qū)域:

代碼區(qū):

? 存放 CPU 執(zhí)行的機(jī)器指令;

? 代碼區(qū)是共享的,共享的目的是對(duì)于頻繁被執(zhí)行的程序,只需要在內(nèi)存中有一份代碼即可;

? 代碼區(qū)是只讀的,使其只讀的原因是防止程序意外地修改了它的指令;

全局區(qū):

? 全局變量和靜態(tài)變量存放在此.

? 全局區(qū)還包含了常量區(qū), 字符串常量和其他常量也存放在此.

該區(qū)域的數(shù)據(jù)在程序結(jié)束后由操作系統(tǒng)釋放.

總結(jié):

  • C++中在程序運(yùn)行前分為全局區(qū)和代碼區(qū)
  • 代碼區(qū)特點(diǎn)是共享和只讀
  • 全局區(qū)中存放全局變量、靜態(tài)變量、常量
  • 常量區(qū)中存放 const修飾的全局常量 和 字符串常量

3、程序運(yùn)行后

棧區(qū):

? 由編譯器自動(dòng)分配釋放, 存放函數(shù)的參數(shù)值,局部變量等

? 注意事項(xiàng):不要返回局部變量的地址,棧區(qū)開(kāi)辟的數(shù)據(jù)由編譯器自動(dòng)釋放

示例:

int * func()
{
	int a = 10;
	return &a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	cout << *p << endl;
	system("pause");
	return 0;
}

堆區(qū):

? 由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)由操作系統(tǒng)回收

? 在C++中主要利用new在堆區(qū)開(kāi)辟內(nèi)存

int* func()
{
    // 利用new關(guān)鍵字,可以將數(shù)據(jù)開(kāi)辟到堆區(qū)
    // 指針 本質(zhì)上是局部變量,放在棧區(qū),指針保存的數(shù)據(jù)放在堆區(qū)
	int* a = new int(10); // new,開(kāi)辟數(shù)據(jù)到堆區(qū),返回?cái)?shù)據(jù)地址
	return a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	cout << *p << endl;
	system("pause");
	return 0;
}

4、new操作符

C++中利用new操作符在堆區(qū)開(kāi)辟數(shù)據(jù)?

堆區(qū)開(kāi)辟的數(shù)據(jù),由程序員手動(dòng)開(kāi)辟,手動(dòng)釋放,釋放利用操作符:delete

? 語(yǔ)法:new 數(shù)據(jù)類型

? 利用new創(chuàng)建的數(shù)據(jù),會(huì)返回該數(shù)據(jù)對(duì)應(yīng)的類型的指針

int* func()
{
	int* a = new int(10);
	return a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	cout << *p << endl;
    // 堆區(qū)的數(shù)據(jù),由程序員管理開(kāi)辟(new),程序員管理釋放(delete)
	// 利用delete釋放堆區(qū)數(shù)據(jù)
	delete p;
	//cout << *p << endl; //報(bào)錯(cuò),釋放的空間不可訪問(wèn)
	system("pause");
	return 0;
}

示例:開(kāi)辟數(shù)組

//堆區(qū)開(kāi)辟數(shù)組
int main() {
	int* arr = new int[10];
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	//釋放數(shù)組 delete 后加 []
	delete[] arr;
	system("pause");
	return 0;
}

到此這篇關(guān)于C++內(nèi)存分區(qū)模型超詳細(xì)講解的文章就介紹到這了,更多相關(guān)C++內(nèi)存分區(qū)模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ stringstream類用法詳解

    C++ stringstream類用法詳解

    這篇文章主要介紹了C++ stringstream類用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++ 繼承,虛繼承(內(nèi)存結(jié)構(gòu))詳解

    C++ 繼承,虛繼承(內(nèi)存結(jié)構(gòu))詳解

    C++繼承和虛繼承的內(nèi)存模型是一個(gè)老生常談的話題,實(shí)現(xiàn)方法主要依賴于編譯器,本文從多個(gè)角度通過(guò)代碼詳解C++中虛繼承的內(nèi)存模型知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • C++實(shí)例輸入多行數(shù)字到數(shù)組

    C++實(shí)例輸入多行數(shù)字到數(shù)組

    這篇文章主要介紹了C++實(shí)例輸入多行數(shù)字到數(shù)組的相關(guān)資料,這里提供實(shí)例代碼幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-12-12
  • Opencv基于CamShift算法實(shí)現(xiàn)目標(biāo)跟蹤

    Opencv基于CamShift算法實(shí)現(xiàn)目標(biāo)跟蹤

    這篇文章主要為大家詳細(xì)介紹了Opencv基于CamShift算法實(shí)現(xiàn)目標(biāo)跟蹤,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • QT利用QProcess獲取計(jì)算機(jī)硬件信息

    QT利用QProcess獲取計(jì)算機(jī)硬件信息

    本文介紹利用QProcess獲取計(jì)算機(jī)的CPU、主板、硬盤(pán)等電腦相關(guān)硬件信息。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)QT有一定的幫助,感興趣的可以了解一下
    2022-06-06
  • C++中的幾個(gè)特殊符號(hào)說(shuō)明

    C++中的幾個(gè)特殊符號(hào)說(shuō)明

    這篇文章主要介紹了C++中的幾個(gè)特殊符號(hào)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(面試官的小結(jié))

    C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(面試官的小結(jié))

    這篇文章主要給大家介紹了關(guān)于C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,這是來(lái)自一名面試官的小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C語(yǔ)言 全局變量和局部變量詳解及實(shí)例

    C語(yǔ)言 全局變量和局部變量詳解及實(shí)例

    這篇文章主要介紹了C語(yǔ)言 全局變量和局部變量詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析

    C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析

    這篇文章主要介紹了C++xxx_cast轉(zhuǎn)換代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 用C語(yǔ)言求解一元二次方程的簡(jiǎn)單實(shí)現(xiàn)

    用C語(yǔ)言求解一元二次方程的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了用C語(yǔ)言求解一元二次方程的簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論

南阳市| 普陀区| 陇南市| 资中县| 太谷县| 东山县| 新兴县| 麦盖提县| 浦北县| 买车| 巍山| 神木县| 富川| 岐山县| 马尔康县| 衡南县| 即墨市| 庆元县| 塔河县| 宽城| 岐山县| 天峨县| 十堰市| 牡丹江市| 汽车| 沙坪坝区| 崇阳县| 中牟县| 鹰潭市| 霸州市| 花垣县| 建宁县| 博客| 滕州市| 宝鸡市| 巴林右旗| 禄劝| 牡丹江市| 五指山市| 临沧市| 安泽县|