最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++內(nèi)存模型&空指針、野指針、函數(shù)指針和回調(diào)函數(shù)

2023-07-08 17:52 作者:清光照歸途  | 我要投稿

C++內(nèi)存模型

C++內(nèi)存模型

棧與堆的區(qū)別:

1.管理方式不同

棧是系統(tǒng)自動管理的,在超出作用域后,將自動被釋放

堆是手動釋放,若程序中不釋放,程序結(jié)束后將由操作系統(tǒng)回收

2.空間大小不同

堆的大小受限于物理內(nèi)存范圍

棧小的可憐,一般為8M(可通過更改系統(tǒng)配置來增加棧的大小)

3.分配方式不同

堆是動態(tài)分配

棧既支持動態(tài)分配也支持靜態(tài)分配

4.分配效率不同

棧是系統(tǒng)中提供的數(shù)據(jù)結(jié)構(gòu)

堆是C++函數(shù)庫提供(鏈表)

5.是否產(chǎn)生碎片

棧:不會產(chǎn)生碎片

堆:由于頻繁分配和釋放,會造成內(nèi)存空間的不連續(xù),產(chǎn)生碎片

6.增長方向不同

棧向下增長???降序分配內(nèi)存地址

堆向上增長???升序分配內(nèi)存地址

指針

1.空指針

在C++中講指針初始化為?**0**?和?**NULL**?都代表空指針

?在C++中添加的**nullptr**可以保證在任何情況下都代表空指針(建議使用)


?使用空指針的后果

  1. 對空指針解引用,程序會崩潰

int?*p=NULL;
cout?<<"&p="<<&p<<endl;?????//對空指針解引用,程序會崩潰

2.對空指針使用delete運算符,系統(tǒng)會忽略該操作,程序不會崩潰


?為什么空指針訪問會出現(xiàn)異常

空指針是程序無論何時都沒有物理存儲器與之對應的地址,而為了確保無論何時”這個條件,人們定義了空指針的空閑分區(qū)(0x00000000~0x0000ffff)

2.野指針

指針指向的不是一個有效(合法)的內(nèi)存地址

?出現(xiàn)野指針的情況(三種)

1.指針在定義時未初始化,其值不確定

2.指向堆分配的內(nèi)存被釋放時,指針指向的地址無效

3.指針指向的變量已超越了變量作用域

??針對的解決方法

1.將指針初始化為nullptr

2.堆內(nèi)存釋放后將指針置為nullptr

3.函數(shù)不返回局部變量的地址

3.函數(shù)指針和回調(diào)函數(shù)

?使用函數(shù)指針的3個步驟

1.聲明函數(shù)指針

2.函數(shù)指針指向函數(shù)地址(在C++中,函數(shù)名就是函數(shù)地址)

3.通過函數(shù)指針調(diào)用函數(shù)



C++內(nèi)存模型&空指針、野指針、函數(shù)指針和回調(diào)函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
衡东县| 固始县| 东至县| 江源县| 凤庆县| 渑池县| 久治县| 嘉义市| 贡觉县| 肥东县| 云南省| 西乌珠穆沁旗| 肥东县| 普定县| 宽甸| 应用必备| 女性| 报价| 桂林市| 吉林省| 嘉义市| 高台县| 广南县| 云阳县| 广元市| 来凤县| 安远县| 大丰市| 鹤岗市| 花莲县| 古丈县| 南平市| 浮山县| 丘北县| 浏阳市| 海林市| 玛曲县| 新密市| 耿马| 澄迈县| 锦州市|