回答
該程序本身有泄漏。操作系統是否清理了這個問題是另一回事。我想最好問問'這個程序可能會在任何系統上造成問題嗎?'答案是肯定的。
C標準無處說,分配malloc
的內存將在程序終止時釋放,無論是正常還是異常。將其與打開文件進行比較,如果程序正常終止,那麼這些文件將被C實現保證關閉。
簡單的答案是肯定的。操作系統是做整理爲你
編輯
對於gg.kaspersky的利益。
當程序到最後你應該整理堆。它表示您已經考慮了所有的分配並提供了這些資源的釋放(這可以說是對於打開的文件或其他操作系統資源是真實的)。
這對你來說足夠複雜嗎?
順便說一句 - 當你訪問一個家庭(OS),你離開它在你到達相同的狀態是很好的禮貌。
我不會考慮內存泄漏。內存仍然可以通過一個變量,當你退出時仍然在範圍內。
釋放您在程序結束時分配的所有內存僅僅是不必要的迂腐,讓您花時間做一些操作系統可以更有效地爲您做的事情。
編輯(技術細節):
隨着在節目的結束操作的方式的存儲器不必要釋放的malloc的一些實現可以效率極其低下。所有通過內聯(通過邊界標籤或類似機制)保持其會計信息的malloc實現將觸及大部分(如果不是全部)已分配的頁面。通常這不是一個問題,除了弄髒被拋棄的緩存行和TLB條目之外,而是將其與一個使用足夠內存來開始使用swap的程序結合使用,並且爲了釋放它而最終交換大量內存。退出時,操作系統可以更高效地執行此操作(只需將交換插槽標記爲空閒)即可。
如果您有一個將內存返回給操作系統的malloc實現,釋放內存將導致操作系統取消映射內存,如果您位於多處理器系統上,則需要昂貴的TLB操作。退出時,失效可以更有效地完成(通過執行完整的TLB刷新或使TLB標記失效)。
這是一個意見問題(在我看來......)。如果將來您的應用程序轉換爲庫(通常會發生這種情況),您現在必須經過並找出所有需要清理的地方。所以你最好先做。 – 2013-03-13 12:39:53
請考慮分配的內存是否包含對OS資源的引用(例如文件描述符到套接字等)。這會告訴我,如果你還沒有分配包含該描述符的內存,它告訴我程序員沒有關閉套接字,即客戶端/服務器仍然掛起。 – 2013-03-13 12:46:13
@OliCharlesworth,我說得對嗎,忽視「良好的編程實踐」的東西,程序(運行在現代Linux操作系統上)不會導致任何問題? – kaspersky 2013-03-13 12:49:24
你的問題是不完整的...因此,你可以得到的最佳答案是「它取決於」。
從程序範圍來看,是的,你有內存泄漏。這應該是顯而易見的。從系統範圍來看,答案取決於您運行的是哪個操作系統。
一般來說,如果您在主流設備(Win7/MacOSX/Linux桌面/筆記本電腦,iOS/Android設備等)上進行編程,則非常安全。我想不出任何主流現代操作系統,在你之後無法清理。
但是,如果您正在使用一些較舊的或嵌入式系統,則您在此處將會泄漏內存將。我在uCLinux平臺(專門爲沒有MMU [內存管理單元]的硬件設計的操作系統)上看到了內存泄漏。
動態內存通常被認爲是危險的,這就是爲什麼在一些RTOS上使用動態內存是不合法的。如果您知道應用程序在其整個生命週期中的部署範圍,那麼您可以像這樣編寫代碼......但您可能不會這樣做,並且您不應該對操作系統將執行的操作做出假設。總是清理你自己的爛攤子。
- 1. 這是否會導致內存泄漏?
- 2. 這是否會導致內存泄漏?
- 3. 這是否會導致內存泄漏?
- 4. 這是否會造成內存泄漏?
- 5. 這是內存泄漏嗎?
- 6. 這是內存泄漏嗎?
- 7. 這是內存泄漏嗎?
- 8. 這是內存泄漏嗎?
- 9. 內存管理:這段代碼是否有內存泄漏?
- 10. System.Diagnostics.EventLog是否泄漏內存?
- 11. 這個簡單的js代碼是否有內存泄漏?
- 12. WebAssembly程序能否泄漏內存?
- 13. 新對象是否有內存泄漏?
- 14. 它是否有內存泄漏?
- 15. sqlite3_exec是否有內存泄漏?
- 16. Async.StartChild是否有內存泄漏?
- 17. Golang程序內存泄漏?
- 18. 一個應用程序的內存泄漏是否正常?
- 19. Objective C選擇器內存管理(這是否泄漏內存)?
- 20. 這段代碼是否有任何內存泄漏?
- 21. 這裏的觀察者實現是否有內存泄漏?
- 22. 是否存在NSCFTimer內存泄漏?
- 23. 這個objective-c代碼是否會導致內存泄漏?
- 24. 這個setTimeout是否會產生任何內存泄漏?
- 25. 這是Sharepoint Workflow應用程序中的內存泄漏嗎?
- 26. 這是Linux Mono應用程序中的內存泄漏嗎?
- 27. 這是可能的內存泄漏嗎?
- 28. 這是在MFC內存泄漏
- 29. Android - 這是內存泄漏嗎?
- 30. 這是Solr中的內存泄漏嗎?
取決於你問誰...有些人不認爲這是泄漏。 – jrok 2013-03-13 12:31:07
@Inisheer,我不問內存是否被釋放:)我問是否這是一個內存泄漏或不。 – kaspersky 2013-03-13 12:33:45
@ gg.kaspersky內存不被釋放是泄漏。在這種情況下,看起來你很好奇在應用程序退出後內存泄漏是否持續。 – Inisheer 2013-03-13 12:37:06