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

C++核心編程之內(nèi)存分區(qū)模型詳解

 更新時(shí)間:2023年07月16日 09:38:51   作者:小灰不停前進(jìn)  
這篇文章主要為大家介紹了C++核心編程中內(nèi)存分區(qū)模型,C++程序在執(zhí)行時(shí),將內(nèi)存大方向分為四個區(qū)域,代碼區(qū),全局區(qū),棧區(qū),堆區(qū),文章通過代碼示例介紹的非常詳細(xì),感興趣的同學(xué)可以參考閱讀下

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

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

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

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

程序運(yùn)行前

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

  • 存放CPU執(zhí)行的機(jī)器指令
  • 代碼區(qū)時(shí)共享的,共享的目的時(shí)對于頻繁被執(zhí)行的程序,只需要在內(nèi)存中有一份代碼即可
  • 代碼區(qū)是只讀的,使其只讀的原因是防止程序意外地修改了他的指令

全局區(qū):

  • 全局變量和靜態(tài)變量存放在此處
  • 全局區(qū)還包含了常量區(qū),字符串常量和其他常量也存放在此
  • 該區(qū)域的數(shù)據(jù)在程序結(jié)束后由操作系統(tǒng)釋放

程序運(yùn)行后

棧區(qū):

  • 由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量等
  • 注意事項(xiàng):不要返回局部變量的地址,棧區(qū)開辟的數(shù)據(jù)由編譯器自動釋放
#include<iostream>
#include<cstdlib>
using namespace std;
//棧區(qū)數(shù)據(jù)注意事項(xiàng) --- 不要返回局部變量的地址
//棧區(qū)的數(shù)據(jù)由編譯器管理開辟和釋放
int* func(int b)	//形參數(shù)據(jù)也會放在棧區(qū)
{
	b = 100;
	int a = 10; //局部變量     存放在棧區(qū),棧區(qū)的數(shù)據(jù)在函數(shù)執(zhí)行完后自動釋放
	return &a;		//返回局部變量的地址   
}
int main()
{
	//接受func函數(shù)的返回值
	int * p = func(1);
	cout << *p << endl;	//第一次可以答應(yīng)正確的數(shù)字,是因?yàn)榫幾g器做了保留
	cout << *p << endl;	//第二次這數(shù)據(jù)就不再保留了(2022版本的vs做出改版,對返回值保留持續(xù)了)
	system("pause");
}

編譯器編譯時(shí)會提示不要返回局部變量或者臨時(shí)變量的地址。一般會被釋放產(chǎn)生問題(在2022VS中加入了更高的適配,對其做出了保留,但是不要如此使用)
堆區(qū)

  • 由程序員分配釋放,若是程序員不釋放,程序結(jié)束時(shí)由操作做系統(tǒng)回收
  • 在C++中主要利用new在堆區(qū)開辟內(nèi)存
    示例
#include<iostream>
using namespace std;
int* func()
{
	//利用new關(guān)鍵字可以將數(shù)據(jù)開辟到堆區(qū)
	//指針 本質(zhì)也是局部變量,放在棧上
	int* p=new int(10);
	return p;
}
int main()
{
	//在堆區(qū)開辟數(shù)據(jù)
	int* p = func();
	cout << *p << endl;
	cout << *p << endl;
	system("pause");
	return 0;
}

總結(jié):

  • 堆區(qū)數(shù)據(jù)由程序員管理開辟和釋放
  • 堆區(qū)數(shù)據(jù)利用new關(guān)鍵字進(jìn)行開辟內(nèi)存

new操作符

  • c++中利用new操作符在堆區(qū)開辟數(shù)據(jù)
  • 堆區(qū)開辟的數(shù)據(jù),由程序員手動開辟,手動釋放,釋放利用操作符delete
  • 語法 : new 數(shù)據(jù)類型
  • 利用new創(chuàng)建的數(shù)據(jù),會返回該數(shù)據(jù)對應(yīng)的類型的指針
  • 示例:
#include<iostream>
using namespace std;
//1、new的基本語法
int* func()
{
	//在堆區(qū)創(chuàng)建整型數(shù)據(jù)
	//new返回的是   該數(shù)據(jù)類型的指針
	int * p = new int(10);
	return p;
}
void test01()
{
	int * p = func();
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	//堆區(qū)的數(shù)據(jù)  由程序員管理開辟,程序員管理釋放
	//如果想釋放堆區(qū)的數(shù)據(jù),利用關(guān)鍵字 delete
	delete p;
	//cout << *p << endl;		//內(nèi)存已經(jīng)釋放,再次訪問是非法操作,會報(bào)錯
}
//2、在堆區(qū)利用new開辟一個數(shù)組
void test02()
{
	//創(chuàng)建10整型數(shù)組,在堆區(qū)
	int * arr = new int[10];		//10代表數(shù)組有10個元素
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100; //給10個元素賦值 100~109
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	//釋放堆區(qū)的數(shù)組
	//釋放數(shù)組的時(shí)候 要加【】才可以
	delete[] arr;
}
int main()
{
    test01();
	test02();
	system("pause");
	return 0;
}

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

相關(guān)文章

  • vc6.0中c語言控制臺程序中的定時(shí)技術(shù)(定時(shí)器)

    vc6.0中c語言控制臺程序中的定時(shí)技術(shù)(定時(shí)器)

    這篇文章主要介紹了vc6.0中c語言控制臺程序中的定時(shí)技術(shù)(定時(shí)器),需要的朋友可以參考下
    2014-04-04
  • C++ 情懷游戲掃雷的實(shí)現(xiàn)流程詳解

    C++ 情懷游戲掃雷的實(shí)現(xiàn)流程詳解

    掃雷是電腦上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,從小編第一次摸到計(jì)算機(jī)開始就玩過掃雷,雖然當(dāng)時(shí)并不理解玩法原理,但終是第一次玩電腦游戲,下面來從掃雷的前世今生講起
    2021-11-11
  • Qt實(shí)現(xiàn)字符串生成二維碼功能

    Qt實(shí)現(xiàn)字符串生成二維碼功能

    這篇文章主要介紹了如何利用Qt實(shí)現(xiàn)字符串生成二維碼功能,文中的實(shí)現(xiàn)過程講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2022-01-01
  • KMP算法最淺顯理解(小白教程)

    KMP算法最淺顯理解(小白教程)

    這篇文章主要介紹了KMP算法最淺顯理解(小白教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • C語言超詳細(xì)講解文件的操作

    C語言超詳細(xì)講解文件的操作

    C語言文件操作的方法有很多,函數(shù)也有很多你知道哪些呢?下面是小編為大家?guī)淼腃語言文件操作的方法,歡迎閱讀
    2022-04-04
  • C++實(shí)現(xiàn)通訊錄管理系統(tǒng)

    C++實(shí)現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • OpenCV實(shí)現(xiàn)直線檢測并消除

    OpenCV實(shí)現(xiàn)直線檢測并消除

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Qt項(xiàng)目打包的實(shí)現(xiàn)步驟

    Qt項(xiàng)目打包的實(shí)現(xiàn)步驟

    本文主要介紹了Qt項(xiàng)目打包的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C語言中調(diào)用Swift函數(shù)實(shí)例詳解

    C語言中調(diào)用Swift函數(shù)實(shí)例詳解

    這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實(shí)例詳解的相關(guān)資料,實(shí)現(xiàn)該功能可以通過定義全局的指向Blocks的對象指針來實(shí)現(xiàn),需要的朋友可以參考下
    2017-07-07
  • c++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

鹤山市| 榕江县| 岢岚县| 个旧市| 潼关县| 通渭县| 肥西县| 砀山县| 海晏县| 衡阳市| 麻栗坡县| 思南县| 许昌市| 临夏市| 二连浩特市| 驻马店市| 文水县| 张家港市| 怀来县| 淮安市| 金沙县| 北海市| 息烽县| 珠海市| 禹州市| 云霄县| 安溪县| 泰和县| 磐安县| 台州市| 皋兰县| 霍邱县| 湟中县| 界首市| 将乐县| 建昌县| 施甸县| 通州区| 信丰县| 南华县| 灵璧县|