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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)問退出C應(yīng)用程序時(shí),是否自動(dòng)釋放了malloc-ed內(nèi)存?

請(qǐng)問退出C應(yīng)用程序時(shí),是否自動(dòng)釋放了malloc-ed內(nèi)存?

C
慕的地10843 2019-09-05 10:05:43
退出C應(yīng)用程序時(shí),是否自動(dò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程序時(shí),即在內(nèi)存中分配一些空間之后,在我退出應(yīng)用程序并且進(jìn)程終止后,我分配的內(nèi)存是否仍會(huì)被分配(即基本上占用空間)?
查看完整描述

3 回答

?
浮云間

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

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

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



查看完整回答
反對(duì) 回復(fù) 2019-09-09
?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

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

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

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

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

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

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



查看完整回答
反對(duì) 回復(fù) 2019-09-09
?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

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

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

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


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



查看完整回答
反對(duì) 回復(fù) 2019-09-09
  • 3 回答
  • 0 關(guān)注
  • 568 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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