久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

為什么重復(fù)free()比內(nèi)存泄漏危害更大

 啟_明_星 2010-04-08
C程序設(shè)計中,,內(nèi)存操作相 關(guān)的錯誤可以說是最常見,同時也是非常隱蔽的一類錯誤,。這類錯誤往往導(dǎo)致程序莫名其妙地崩潰,、耗盡系統(tǒng)資源,或是形成嚴重的安全弱點,。;Q BF)|0]g,g_ QUBSD愛好者樂園7J&[:T!e9NZ

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

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

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

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

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

BSD愛好者樂園?Na3[y#Q8y

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

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

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

BSD愛好者樂園:kM XAk0n1S8F"Wh,I

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

#uE;B.t)UBSD愛好者樂園v:]ET izl

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


[版權(quán)聲明]BSD愛好者樂園站內(nèi)文章,,如來源不是互聯(lián) 網(wǎng),則均系原創(chuàng)或翻譯之作,,可隨意轉(zhuǎn)載,,或以此為基礎(chǔ)進行演譯,但務(wù)必以鏈接形式注明原始出處和作者信息,,否則屬于侵權(quán)行為,。另對本站轉(zhuǎn)載他處文章,俱有 說明,,如有侵權(quán)請聯(lián)系本人,,本人將會在第一時間刪除侵權(quán)文章。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多