[英]c++ program crashes when “free” memory is zero but standby-memory is still available
[英]Does a c++ program automatically free memory when it crashes?
我讀過谷歌c ++編碼標准,谷歌不使用例外。 如果未使用異常,如何在程序中發生錯誤時釋放內存?
例如,f()調用g(),如果g()中有錯誤,我應該釋放g()中分配的所有內存,然后調用f()的異常。 一旦f()捕獲異常,f()將釋放f()中分配的所有內存,並退出程序。
如果沒有使用異常,並且如果g()中有錯誤,我可以強制退出exit(0)
,並且c ++程序是否足夠智能以釋放所有已分配的內存? 我的猜測是,因為c ++維護堆棧和堆,一旦程序退出,c ++會自動釋放堆棧和堆嗎?
當進程因任何原因終止時,操作系統會清除所有使用的內存和文件句柄。
我聽說有些內存類型,比如在Windows上,COM全局堆內存無法為你釋放。 但是, 大多數內存/句柄都會被清除,因為操作系統必須應對應用程序崩潰的情況。 在進程本地內存和大多數句柄(如文件句柄等)的情況下,您當然可以保證它。在一般情況下,您可以假設操作系統將在您退出應用程序后進行清理。
此外,永遠不要遵循谷歌的風格指南。 它不適用於C ++,它適用於C ++減去你必須帶走的所有東西才能制作它。它可能適用於谷歌(可疑),但絕對不會對任何其他人有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.