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

C++ 面向?qū)ο蟪绦蛟O(shè)計(jì)--內(nèi)存分區(qū)詳解

 更新時(shí)間:2021年08月29日 15:34:55   作者:物聯(lián)黃同學(xué)  
這篇文章主要介紹了剖析C++的面向?qū)ο缶幊趟枷?C++的面向?qū)ο筇匦允瞧鋵?duì)C語(yǔ)言的重要拓展之處,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助

一、分區(qū)的意義

在講分區(qū)前,先談?wù)剝?nèi)存分區(qū)的意義,也就是為什么程序要進(jìn)行分區(qū)?

筆者認(rèn)為這是為了編程的靈活性,因?yàn)閷?nèi)存分區(qū)后,不同區(qū)域的內(nèi)存,相關(guān)的數(shù)據(jù)就有的不同的生命周期。以筆者之前的一篇算法復(fù)雜度的blog中提到棧幀空間為例,在此就是指棧區(qū),而棧區(qū)多指非main函數(shù)調(diào)用的內(nèi)存(相關(guān)參數(shù)等),當(dāng)非main函數(shù)調(diào)用結(jié)束后,這塊的內(nèi)存就會(huì)清空釋放。而這里的數(shù)據(jù)就可以和在main函數(shù)中的數(shù)據(jù)有不同的生命周期。

二、代碼區(qū)

1、定義

存放函數(shù)體內(nèi)的二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理

注意:代碼區(qū)是在程序運(yùn)行前的內(nèi)存區(qū)域,除了代碼區(qū),運(yùn)行前還有全局區(qū)。代碼區(qū)存放的二進(jìn)制代碼其實(shí)就是編譯器(cpu)執(zhí)行的指令。

2、特點(diǎn)

1)代碼區(qū)是共享的,之所以共享是因?yàn)閷?duì)于被頻繁執(zhí)行的程序,只需要在內(nèi)存中存放一份代碼即可。避免內(nèi)存過(guò)多的浪費(fèi)。

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

三、全局區(qū)

前面提到全局區(qū),也在程序執(zhí)行前。

1、定義

存放全局變量和靜態(tài)變量以及常量

2、特點(diǎn)

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

3、相關(guān)代碼

1)全局變量

#include<iostream>
#include<string>
using namespace std;
// 全局變量
int g_a = 10;
int g_b = 10;
int main()
{
	// 全局區(qū)
	// 全局變量、靜態(tài)變量、常量
	// 創(chuàng)建普通局部變量
	int a = 10;
	int b = 10;
	cout << "局部變量a的地址為: " << (int)&a << endl
		<< "局部變量b的地址為: " << (int)&b << endl;
	cout << "全局變量g_a的地址為: " << (int)&g_a << endl;
	cout << "全局變量g_b的地址為: " << (int)&g_b << endl;

	system("pause");
	return 0;
}

程序執(zhí)行結(jié)果:


從結(jié)果看,局部變量和全局變量存放的地址顯然有很大的不同,而從a和b以及g_a和g_b的地址來(lái)看,全局變量和局部變量相鄰的變量的內(nèi)存地址是相近,從結(jié)果看是差了4,這是因?yàn)閱挝籭nt占4個(gè)字節(jié)。

2)靜態(tài)變量

// 靜態(tài)變量	 在普通變量前面加static,屬于靜態(tài)變量
	static int s_a = 10;
	static int s_b = 10;
	cout << "靜態(tài)變量s_a的地址為: " << (int)&s_a << endl;
	cout << "靜態(tài)變量s_b的地址為: " << (int)&s_b << endl;

將上述代碼加入到前面的main函數(shù)中,運(yùn)行得到如下結(jié)果


3)常量(不包含局部常量即const修飾的局部變量)

#include<iostream>
#include<string>
using namespace std;
// 全局變量
int g_a = 10;
int g_b = 10;
// 全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
{
	// 全局區(qū)
	// 全局變量、靜態(tài)變量、常量
	// 創(chuàng)建普通局部變量
	int a = 10;
	int b = 10;
	cout << "局部變量a的地址為: " << (int)&a << endl
		<< "局部變量b的地址為: " << (int)&b << endl;
	cout << "全局變量g_a的地址為: " << (int)&g_a << endl;
	cout << "全局變量g_b的地址為: " << (int)&g_b << endl;
	// 靜態(tài)變量	 在普通變量前面加static,屬于靜態(tài)變量
	static int s_a = 10;
	static int s_b = 10;
	cout << "靜態(tài)變量s_a的地址為: " << (int)&s_a << endl;
	cout << "靜態(tài)變量s_b的地址為: " << (int)&s_b << endl;
	// 常量
	// 字符串常量
	cout << "字符串常量的地址為: " << (int)&"hello world" << endl;
	//const修飾的變量
	// const修飾的全局變量、const修飾的局部變量
	cout << "全局常量c_g_a的地址為: " << (int)&c_g_a << endl;
	cout << "全局常量c_g_b的地址為: " << (int)&c_g_b << endl;
	// 局部常量
	const int c_l_a = 10;
	const int c_l_b = 10;
	cout << "局部常量c_l_a的地址為: " << (int)&c_l_a << endl;
	cout << "局部常量c_l_b的地址為: " << (int)&c_l_b << endl;
	system("pause");
	return 0;
}


四、棧區(qū)——程序運(yùn)行后

1、定義

由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量等
注意 :不要返回局部變量的地址,棧區(qū)開(kāi)辟的數(shù)據(jù)由編譯器自動(dòng)釋放。

2、相關(guān)代碼

#include<iostream>
#include<string>
using namespace std;
// 棧區(qū)注意事項(xiàng)——不要返回局部變量的地址
// 棧區(qū)的數(shù)據(jù)由編譯器管理開(kāi)辟和釋放
int* func(int b)	// 形參數(shù)據(jù)也會(huì)放在棧區(qū)
{
	b = 100;
	int a = 10;	// 局部變量	 存放在棧區(qū),棧區(qū)的數(shù)據(jù)在函數(shù)執(zhí)行完后自動(dòng)釋放
	return &a;	// 返回局部變量的地址
}

int main()
{
	// 接收f(shuō)unc函數(shù)的返回值
	int* p = func(1);
	cout << *p << endl;	// 第一次可以打印正確數(shù)字,是因?yàn)榫幾g器做了保留
	cout << *p << endl;	// 第二次就不保留了

	system("pause");
	return 0;
}

五、堆區(qū)——運(yùn)行后

1、定義

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

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

2、相關(guān)代碼和運(yùn)行結(jié)果

#include<iostream>
#include<string>
using namespace std;
int* func()
{
	// 利用new關(guān)鍵字 可以將數(shù)據(jù)開(kāi)辟到堆區(qū)
	// 指針 本質(zhì)也是局部變量,放在棧上,指針保存的數(shù)據(jù)是放在堆區(qū)
	int* p = new int(10);
	return p;
}

int main()
{
	// 在堆區(qū)開(kāi)辟數(shù)據(jù)
	int* p = func();
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	system("pause");
	return 0;
}

總結(jié)

本片文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言編程中生成隨機(jī)數(shù)的入門教程

    C語(yǔ)言編程中生成隨機(jī)數(shù)的入門教程

    這篇文章主要介紹了C語(yǔ)言編程中生成隨機(jī)數(shù)的入門教程,包括利用rand()函數(shù)來(lái)編寫隨機(jī)數(shù)生成器的示例,要的朋友可以參考下
    2015-12-12
  • C語(yǔ)言繪制曲線圖的示例代碼

    C語(yǔ)言繪制曲線圖的示例代碼

    這篇文章主要介為大家詳細(xì)紹了如何使用C語(yǔ)言繪制統(tǒng)計(jì)圖中的曲線圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • C++鏈表節(jié)點(diǎn)的添加和刪除介紹

    C++鏈表節(jié)點(diǎn)的添加和刪除介紹

    大家好,本篇文章主要講的是C++鏈表節(jié)點(diǎn)的添加和刪除介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 在C++中實(shí)現(xiàn)云端存儲(chǔ)變量的操作步驟

    在C++中實(shí)現(xiàn)云端存儲(chǔ)變量的操作步驟

    隨著云計(jì)算技術(shù)的快速發(fā)展,現(xiàn)在我們可以將數(shù)據(jù)存儲(chǔ)在云端,以便于在不同設(shè)備和地點(diǎn)訪問(wèn),在C++中,我們也可以通過(guò)一些方法來(lái)實(shí)現(xiàn)這個(gè)功能,本文將詳細(xì)介紹如何在C++中實(shí)現(xiàn)云端存儲(chǔ)變量,需要的朋友可以參考下
    2023-11-11
  • 解析C++引用

    解析C++引用

    引用是C++引入的新語(yǔ)言特性,是C++常用的一個(gè)重要內(nèi)容之一。在工作中發(fā)現(xiàn),許多人使用它僅僅是想當(dāng)然,在某些微妙的場(chǎng)合,很容易出錯(cuò),究其原由,大多因?yàn)闆](méi)有搞清本源。在本篇中將對(duì)引用進(jìn)行詳細(xì)討論,希望對(duì)大家更好地理解和使用引用起到拋磚引玉的作用
    2021-06-06
  • c語(yǔ)言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例

    c語(yǔ)言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例

    這篇文章主要介紹了c語(yǔ)言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法

    Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法

    這篇文章主要介紹了Qt中簡(jiǎn)單的按鈕槽函數(shù)傳遞參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Qt讀寫ini文件的方法詳解(含源碼+注釋)

    Qt讀寫ini文件的方法詳解(含源碼+注釋)

    .ini文件是Initialization?File的縮寫,即初始化文件,下面這篇文章主要給大家介紹了關(guān)于Qt讀寫ini文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 詳細(xì)理解函C語(yǔ)言的函數(shù)棧幀

    詳細(xì)理解函C語(yǔ)言的函數(shù)棧幀

    這篇文章主要為大家介紹了C語(yǔ)言的函數(shù)棧幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助,希望能夠給你帶來(lái)幫助
    2021-11-11
  • C++如何實(shí)現(xiàn)簡(jiǎn)單的計(jì)時(shí)器詳解

    C++如何實(shí)現(xiàn)簡(jiǎn)單的計(jì)時(shí)器詳解

    因?yàn)樽罱e著無(wú)聊就想著要不用C++寫點(diǎn)什么東西,仔細(xì)想了想其實(shí)自己的C++學(xué)的也不怎么好,寫個(gè)簡(jiǎn)單的計(jì)時(shí)器吧!所以下面這篇文章主要介紹了利用C++如何實(shí)現(xiàn)簡(jiǎn)單的計(jì)時(shí)器,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01

最新評(píng)論

天祝| 南溪县| 司法| 湘乡市| 绿春县| 临泽县| 丹棱县| 梧州市| 峡江县| 高清| 淮阳县| 西和县| 赫章县| 铜山县| 凤庆县| 塘沽区| 石棉县| 鄂托克旗| 禄丰县| 怀来县| 额尔古纳市| 达尔| 富民县| 大化| 正安县| 琼海市| 通江县| 邵东县| 仁化县| 青阳县| 北票市| 新源县| 宁化县| 怀柔区| 泊头市| 茌平县| 垣曲县| 莲花县| 大同县| 喀喇沁旗| 河池市|