国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
為什么重復(fù)free()比內(nèi)存泄漏危害更大
C程序設(shè)計(jì)中,內(nèi)存操作相關(guān)的錯(cuò)誤可以說(shuō)是最常見(jiàn),同時(shí)也是非常隱蔽的一類錯(cuò)誤。這類錯(cuò)誤往往導(dǎo)致程序莫名其妙地崩潰、耗盡系統(tǒng)資源,或是形成嚴(yán)重的安全弱點(diǎn)。;Q BF)|0]g,g_ QUBSD愛(ài)好者樂(lè)園7J&[:T!e9NZ

FreeBSD,以及多數(shù)其他 BSD 派生的系統(tǒng)中,重復(fù) free()在默認(rèn)情況下都會(huì)導(dǎo)致 C 函數(shù)庫(kù)調(diào)用abort() 終止程序。除了 malloc(3) 函數(shù)族本身的設(shè)計(jì)之外,這也是一項(xiàng)非常重要的安全特性。與此相反,包括 *BSD在內(nèi)的多數(shù)系統(tǒng)的 C 函數(shù)庫(kù)并不對(duì)堆進(jìn)行審計(jì),也就是說(shuō),從 API 設(shè)計(jì)者的觀點(diǎn)來(lái)看,內(nèi)存泄漏并不被認(rèn)為是非常嚴(yán)重的程序設(shè)計(jì)問(wèn)題。BSD愛(ài)好者樂(lè)園x#ilyP9S`H8H?Y

Oms1u9l#UE3j為什么會(huì)有這樣的區(qū)別呢?事實(shí)上,內(nèi)存泄漏同樣可以導(dǎo)致比較嚴(yán)重的問(wèn)題,例如響應(yīng)速度變慢、進(jìn)程由于占用的資源太多而被 OS 殺掉導(dǎo)致 DoS等等。為了回答這個(gè)問(wèn)題,我們來(lái)觀察一下兩種問(wèn)題出現(xiàn)的場(chǎng)景。BSD愛(ài)好者樂(lè)園5H"y:b6hXv j.G

%m)t^-S~sx內(nèi)存泄漏是指這樣一種場(chǎng)景:程序分配了一塊內(nèi)存,但已經(jīng)不再持有引用這塊內(nèi)存的對(duì)象(通常是指針)。從OS的角度,它知道進(jìn)程持有的內(nèi)存數(shù)量;然而,從進(jìn)程的角度,它可能并不完全知道自己持有哪些內(nèi)存。換言之,內(nèi)存泄漏就是通過(guò)遍歷進(jìn)程內(nèi)所有可以從棧上,或以靜態(tài)變量形式存于堆上的指針及其后繼,無(wú)法到達(dá)所有全部已分配內(nèi)存的情形。

:K,`?^1T2s8Y9@5H~2p

/V}X,M'jq4EE如果程序不存在其他問(wèn)題(例如緩沖區(qū)溢出),此時(shí)程序訪問(wèn)內(nèi)存時(shí),任何時(shí)候都不會(huì)在無(wú)意中覆寫超出范圍的數(shù)據(jù)。即,將數(shù)據(jù)覆寫到程序其他部分保存數(shù)據(jù)的內(nèi)存單元。BSD愛(ài)好者樂(lè)園w M)oSVFjd

BSD愛(ài)好者樂(lè)園?Na3[y#Q8y

重復(fù)釋放則指這樣一種場(chǎng)景:程序分配一塊內(nèi)存之后,經(jīng)過(guò)使用將這塊內(nèi)存釋放,但并沒(méi)有將指向這塊內(nèi)存的所有指針抹零或回收,并在其他部分再次將指向同一塊內(nèi)存單元的指針交給內(nèi)存分配器去進(jìn)行釋放操作。這種情況下,我們可以斷言:

_5ggx[4c
  • 程 序邏輯并不清楚這塊內(nèi)存已經(jīng)被釋放;并且,
  • 有理由相信,對(duì)這塊內(nèi)存進(jìn)行的寫操作,可能已經(jīng)影響了程序其他部分的行為,因?yàn)檫@塊內(nèi)存可能 已經(jīng)分配作為其他用途。
BSD愛(ài)好者樂(lè)園4R"Y(U/Vk0os

因此,這應(yīng)被看作立即停止程序運(yùn)行的一項(xiàng)致命錯(cuò)誤,因?yàn)槌绦蛐袨橐呀?jīng)出現(xiàn)了異常,而C函數(shù)庫(kù)擁有的信息不足以糾正這種異常行為,而另一方面,程序可能已經(jīng)發(fā)生了堆緩沖區(qū)溢出。BSD愛(ài)好者樂(lè)園[ kfQ"e5S

BSD愛(ài)好者樂(lè)園:kMXAk0n1S8F"Wh,I

為了削弱這類問(wèn)題帶來(lái)的實(shí)質(zhì)性安全影響,現(xiàn)代的內(nèi)存分配器往往會(huì)將尺寸接近的內(nèi)存塊放在一起(這樣做還能夠抑制內(nèi)存碎片的產(chǎn)生,并提高CPU的數(shù)據(jù)緩存命中率,因?yàn)橥ǔ3绦驎?huì)傾向于一次性地訪問(wèn)相近的內(nèi)存結(jié)構(gòu)),從而能夠在一定程度上減輕由于向已經(jīng)釋放的內(nèi)存塊繼續(xù)寫數(shù)據(jù)導(dǎo)致的損害(因?yàn)檫@些內(nèi)存很可能被分配給同樣的數(shù)據(jù)結(jié)構(gòu),這類寫操作的危害往往會(huì)低于向其他類型的數(shù)據(jù)結(jié)構(gòu)寫數(shù)據(jù),特別是當(dāng)這些數(shù)據(jù)中包含一部分用戶輸入的時(shí)候)。

#uE;B.t)UBSD愛(ài)好者樂(lè)園v:]ET izl

當(dāng)然,徹底消除這類問(wèn)題,需要為程序設(shè)計(jì)語(yǔ)言增加一些新的基礎(chǔ)設(shè)施(例如強(qiáng)類型、托管內(nèi)存等)?,F(xiàn)代程序設(shè)計(jì)語(yǔ)言如Java、Python和.net系列等,都采用了避免這類問(wèn)題的措施。然而,也正因?yàn)槿绱耍ㄟ^(guò)這些語(yǔ)言入門并準(zhǔn)備撰寫 C 程序的開(kāi)發(fā)人員就更需要注意這類問(wèn)題。BSD愛(ài)好者樂(lè)園;nzZkg2EO%o


[版權(quán)聲明]BSD愛(ài)好者樂(lè)園站內(nèi)文章,如來(lái)源不是互聯(lián)網(wǎng),則均系原創(chuàng)或翻譯之作,可隨意轉(zhuǎn)載,或以此為基礎(chǔ)進(jìn)行演譯,但務(wù)必以鏈接形式注明原始出處和作者信息,否則屬于侵權(quán)行為。另對(duì)本站轉(zhuǎn)載他處文章,俱有說(shuō)明,如有侵權(quán)請(qǐng)聯(lián)系本人,本人將會(huì)在第一時(shí)間刪除侵權(quán)文章。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
內(nèi)存泄漏
檢測(cè)內(nèi)存泄露的原理
C++內(nèi)存管理
杜比環(huán)繞聲的個(gè)人空間 Power by X-Space
C語(yǔ)言運(yùn)行時(shí)庫(kù)詳解
如何在linux下檢測(cè)內(nèi)存泄漏
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服