第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

退出C應(yīng)用程序時,是否自動釋放了malloc-ed內(nèi)存?

退出C應(yīng)用程序時,是否自動釋放了malloc-ed內(nèi)存?

C
jeck貓 2019-11-23 15:15:31
退出C應(yīng)用程序時,是否自動釋放了malloc-ed內(nèi)存?假設(shè)我有以下C代碼:int main () {   int *p = malloc(10 * sizeof *p);   *p = 42;   return 0;  //Exiting without freeing the allocated memory}當(dāng)我編譯并執(zhí)行該C程序時,即在內(nèi)存中分配一些空間之后,在我退出應(yīng)用程序并且進(jìn)程終止后,我分配的內(nèi)存是否仍會被分配(即基本上占用空間)?
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊

這取決于操作系統(tǒng)。大多數(shù)現(xiàn)代(和所有主要)操作系統(tǒng)將釋放程序結(jié)束時未被程序釋放的內(nèi)存。

依賴于此是不好的做法,最好明確地釋放它。問題不僅在于您的代碼看起來很糟糕。您可能決定將小程序集成到一個較大的,長期運行的程序中。然后一段時間后,你必須花費數(shù)小時追蹤內(nèi)存泄漏。
依賴于操作系統(tǒng)的功能也使代碼不那么便攜。




查看完整回答
反對 回復(fù) 2019-11-24
?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊

通常,現(xiàn)代通用操作系統(tǒng)在終止進(jìn)程后進(jìn)行清理。這是必要的,因為替代方案是系統(tǒng)隨著時間的推移而丟失資源,并且由于編寫不良的程序或者只是很少發(fā)生泄漏資源的錯誤而需要重新啟動。

無論如何,讓您的程序明確地釋放其資源可能是出于各種原因的良好實踐,例如:

  • 如果您有其他資源在退出時未被操作系統(tǒng)清理,例如臨時文件或?qū)ν獠抠Y源狀態(tài)的任何類型更改,那么您將需要代碼在退出時處理所有這些事情,這通常優(yōu)雅地結(jié)合釋放記憶。

  • 如果您的程序開始具有更長的生命周期,那么您將不希望釋放內(nèi)存的唯一方法是退出。例如,您可能希望將程序轉(zhuǎn)換為服務(wù)器(守護程序),該服務(wù)器在處理對單個工作單元的許多請求時保持運行,或者您的程序可能成為較大程序的一小部分。

但是,這是跳過釋放內(nèi)存的原因:高效關(guān)機。例如,假設(shè)您的應(yīng)用程序在內(nèi)存中包含一個大緩存。如果它退出時它會通過整個緩存結(jié)構(gòu)并一次釋放一個,這沒有任何用處,浪費資源。特別是,考慮操作系統(tǒng)將包含緩存的內(nèi)存頁面交換到磁盤的情況; 通過走結(jié)構(gòu)并釋放它,你將所有這些頁面一次性地帶回到內(nèi)存中,浪費了大量的時間和精力,沒有實際的好處,甚至可能導(dǎo)致系統(tǒng)上的其他程序被換掉!

作為一個相關(guān)的例子,有一些高性能服務(wù)器通過為每個請求創(chuàng)建一個進(jìn)程來工作,然后在完成時退出它; 通過這種方式,他們甚至不必跟蹤內(nèi)存分配,并且根本不進(jìn)行任何釋放或垃圾收集,因為在進(jìn)程結(jié)束時所有內(nèi)容都會消失回操作系統(tǒng)的可用內(nèi)存。(在使用自定義內(nèi)存分配器的進(jìn)程中可以完成同樣的事情,但需要非常仔細(xì)的編程;基本上在OS進(jìn)程中制定自己的“輕量級進(jìn)程”概念。)



查看完整回答
反對 回復(fù) 2019-11-24
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

我很抱歉在最后一篇帖子發(fā)布到這個帖子后這么久了。

還有一點。并非所有程序都能讓它出色地退出。崩潰和ctrl-C等將導(dǎo)致程序以不受控制的方式退出。如果您的操作系統(tǒng)沒有釋放堆,清理堆棧,刪除靜態(tài)變量等,最終會導(dǎo)致系統(tǒng)崩潰或內(nèi)存泄漏。

有趣的是,Ubuntu中的崩潰/中斷,我懷疑所有其他現(xiàn)代操作系統(tǒng),確實存在“處理”資源的問題。當(dāng)程序結(jié)束/崩潰時,套接字,文件,設(shè)備等可以保持“打開”。在優(yōu)雅退出之前,作為清理工作的一部分,使用“手柄”或“描述符”關(guān)閉任何東西也是一種很好的做法。

我目前正在開發(fā)一個大量使用套接字的程序。當(dāng)我陷入困境時,我必須從中調(diào)出ctrl-c,因此,擱置我的插座。我添加了一個std :: vector來收集所有打開的套接字列表和一個捕獲sigint和sigterm的sigaction處理程序。處理程序遍歷列表并關(guān)閉套接字。我計劃在拋出前使用類似的清理程序,這將導(dǎo)致提前終止。


有人關(guān)心這個設(shè)計嗎?



查看完整回答
反對 回復(fù) 2019-11-24
  • 3 回答
  • 0 關(guān)注
  • 497 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號