內(nèi)存管理

作者:yangqi916

鏈接:http://www.reibang.com/p/cdfde318d5ee

來源:簡書

1.內(nèi)存分配方式

在C++中內(nèi)存分為5個(gè)區(qū),分別是堆轧粟、棧遭庶、自由存儲(chǔ)區(qū)蟆技、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)加缘。

堆:堆用于程序的內(nèi)存動(dòng)態(tài)分配,C語言使用malloc從堆上分配內(nèi)存霹娄,使用free釋放已分配的對(duì)應(yīng)內(nèi)存能犯。

棧:在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建犬耻,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放踩晶。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高香追,但是分配的內(nèi)存容量有限合瓢。

自由存儲(chǔ)區(qū):自由存儲(chǔ)區(qū)是C++基于new操作符的一個(gè)抽象概念坦胶,凡是通過new操作符進(jìn)行內(nèi)存申請(qǐng)透典,該內(nèi)存即為自由存儲(chǔ)區(qū)。

全局/靜態(tài)存儲(chǔ)區(qū):這塊內(nèi)存是在程序編譯的時(shí)候就已經(jīng)分配好的顿苇,在程序整個(gè)運(yùn)行期間都存在峭咒。例如全局變量,靜態(tài)變量纪岁。

常量存儲(chǔ)區(qū):這是一塊比較特殊的存儲(chǔ)區(qū)凑队,他們里面存放的是常量(const),不允許修改。


malloc與new的區(qū)別

http://www.reibang.com/writer#/notebooks/14660241/notes/17058500


常見的內(nèi)存錯(cuò)誤及解決方法

a.內(nèi)存分配未成功漩氨,卻使用了它西壮。

解決方法:在使用內(nèi)存之前檢查指針是否為NULL。如果指針p是函數(shù)的參數(shù)叫惊,那么在函數(shù)的入口處用assert(p!=NULL)進(jìn)行檢查款青。如果是用malloc來申請(qǐng)內(nèi)存,應(yīng)該用if(p==NULL) 或if(p!=NULL)進(jìn)行防錯(cuò)處理霍狰。如果是用new來申請(qǐng)內(nèi)存抡草,申請(qǐng)失敗是會(huì)拋出異常,所以應(yīng)該捕捉異常來進(jìn)行放錯(cuò)處理蔗坯。

b.內(nèi)存分配雖然成功康震,但是尚未初始化就引用它。

解決方法:盡管有時(shí)候缺省時(shí)會(huì)自動(dòng)初始化宾濒,但是無論創(chuàng)建什么對(duì)象均要對(duì)其進(jìn)行初始化腿短,即便是賦零值也不可省略,不要嫌麻煩绘梦。

c.內(nèi)存分配成功答姥,但越界訪問。

解決方法:對(duì)數(shù)組for循環(huán)時(shí)要把握邊界谚咬,否則可能會(huì)導(dǎo)致數(shù)組越界鹦付。

d.忘記了釋放內(nèi)存,導(dǎo)致內(nèi)存泄漏择卦。

解決方法:動(dòng)態(tài)內(nèi)存的申請(qǐng)和釋放必須配對(duì)敲长,new-delete和malloc-free且使用次數(shù)必須相同

e.已經(jīng)釋放內(nèi)存卻仍然使用它秉继。

有三種情況:

1.程序中對(duì)象的關(guān)系過于復(fù)雜,難以搞清哪個(gè)對(duì)象是否已經(jīng)釋放了內(nèi)存祈噪。

2.函數(shù)中return寫錯(cuò),返回了指向棧中的指針或引用。

3. free或delete后,沒有將指針設(shè)為NULL,產(chǎn)生”野指針”尚辑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辑鲤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠茬,更是在濱河造成了極大的恐慌月褥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓢喉,死亡現(xiàn)場(chǎng)離奇詭異宁赤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)栓票,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門决左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事佛猛』蟀牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵继找,是天一觀的道長强衡。 經(jīng)常有香客問我,道長码荔,這世上最難降的妖魔是什么漩勤? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缩搅,結(jié)果婚禮上越败,老公的妹妹穿的比我還像新娘。我一直安慰自己硼瓣,他們只是感情好究飞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堂鲤,像睡著了一般亿傅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘟栖,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天葵擎,我揣著相機(jī)與錄音,去河邊找鬼半哟。 笑死酬滤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寓涨。 我是一名探鬼主播盯串,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼戒良!你這毒婦竟也來了体捏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤糯崎,失蹤者是張志新(化名)和其女友劉穎几缭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拇颅,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奏司,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年乔询,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了樟插。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖黄锤,靈堂內(nèi)的尸體忽然破棺而出搪缨,到底是詐尸還是另有隱情淮野,我是刑警寧澤枉昏,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站妆毕,受9級(jí)特大地震影響流强,放射性物質(zhì)發(fā)生泄漏痹届。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一打月、第九天 我趴在偏房一處隱蔽的房頂上張望队腐。 院中可真熱鬧,春花似錦奏篙、人聲如沸柴淘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽为严。三九已至,卻和暖如春肺稀,著一層夾襖步出監(jiān)牢的瞬間第股,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工话原, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炸茧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓稿静,卻偏偏與公主長得像梭冠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子改备,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1控漠、內(nèi)存分配方式內(nèi)存分配方式有三種:代碼區(qū)/文本區(qū) 只讀并具有可執(zhí)行權(quán)限 從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)...
    Albert_Sun閱讀 306評(píng)論 1 0
  • 前言 C語言作為一門應(yīng)用途廣泛悬钳、功能強(qiáng)大盐捷、使用靈活的面向過程式編程語言。既可用于編寫應(yīng)用軟件默勾,又能用于編寫系統(tǒng)軟件...
    老板娘來盤一血閱讀 12,970評(píng)論 32 83
  • 謹(jǐn)記 人生有兩條路碉渡,一天需要用心走,叫做夢(mèng)想母剥;一條需要用腳走滞诺,叫做現(xiàn)實(shí)形导。心走的太快,會(huì)迷路的习霹;腳走的太快朵耕,會(huì)摔倒的...
    長風(fēng)留言閱讀 5,914評(píng)論 7 16
  • 內(nèi)存分配方式 在C++中,內(nèi)存分成5個(gè)區(qū)淋叶,他們分別是堆阎曹、棧、自由存儲(chǔ)區(qū)煞檩、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)处嫌。 在棧上創(chuàng)建...
    showaichuan閱讀 324評(píng)論 0 2
  • 嵌入式系統(tǒng)的內(nèi)存管理 姓名:張猛 引用自:http://blog.csdn.net/baskmmu/article...
    oliverabc閱讀 2,074評(píng)論 0 0