2014-12-07 79 views
0

我知道清理是一件好事。我也理解操作系統的內部,所以如果我知道我的進程正在終止,那麼它的內存將被釋放。但我喜歡提出不同的觀點。我認爲在退出時釋放內存相當糟糕。清理出口或不清潔

例如,我可能已經分配了大量的內存,如果我在退出時釋放它,它需要被帶到RAM中,然後釋放它。如果我不,在退出時,它只會在一張桌子上標出。我知道這個問題可以被認爲是A_VERY_PLATFORM_DEPENDENT,但是從今天的應用程序開發人員的角度來看,他要麼被阻塞(?)到某個框架中,要麼被阻塞冒着嚴重依賴原始技術的冒險編碼器,我會打電話給VERY_CONTROLLED_ENVIRONMENT。

對於TL;DR:在現代操作系統上,我認爲我不應該在退出時執行清理。如果你認爲我錯了,爲什麼? PS:我不是在談論RTOS,我的意思是控制環境意味着Windows,Linux和我從來不意味着設備驅動程序的開發或者操作系統開發。

+0

我懷疑在應用程序free和so free之間是否有區別(關於需要將SWAP中的頁面帶入RAM) – bolov 2014-12-07 19:55:43

+0

這是幾個星期前討論過的。我會找到並標記這個重複。 – 2014-12-07 19:55:48

+2

非內存資源如文件句柄,內核句柄等呢?如果你不清理基於內存的資源,你怎麼能確定他們沒有拿着「外部」手柄? – 2014-12-07 19:56:12

回答

7

僅當您訪問已換出的內存塊時纔會進入內存塊。釋放塊是一個「簿記」事件,它不需要訪問內存。通過跳過釋放內存的呼叫,您不會獲得任何收益。

在退出時始終手動釋放資源的原因要強得多:它可以讓您使用工具進行內存分析,因爲您可以區分意外泄漏和故意泄漏。僅此原因足以推薦避免內存清理。

+1

我想+2 – bolov 2014-12-07 20:09:02

+0

'這個理由就足以推薦反對跳過內存清理'。那麼,不。這是一個優點。這不是一個壓倒一切的問題。 – 2014-12-08 03:19:11

+0

@MartinJames我只是說這個理由本身就夠好。可能還有其他一些很好的理由(例如,當你的代碼在生產中運行關鍵操作時能夠在晚上睡得好),每個人都有足夠的自身權利。就我個人而言,我發現將C++代碼發佈到生產環境而不運行內存分析器並修復它報告的所有警告是非常危險的。 – dasblinkenlight 2014-12-08 03:32:05