簡體   English   中英

當庫在退出時沒有在c ++中“清理”時會發生什么

[英]What happens when libraries are not “cleaned up” in c++ upon exit

我正在運行linux,並且只是想知道在進程死亡之后實際發生了什么,而不是通過在它們或類似的東西上運行終止函數來“清理”的庫代碼。 我看到人們在退出函數上實現特定的清理,而其他人則沒有這樣做。

這取決於你期望的清潔。 將關閉/釋放庫已打開的所有本地OS資源(內存,打開的文件/套接字等)。 即使您沒有調用關聯的清理函數(free / delete,fclose / close等),也會發生這種情況。

但是,不會自動清除非OS資源(例如在服務器上啟動的事務)。 這是因為操作系統無法知道在這種情況下該怎么做。 編寫良好的服務器將慷慨地處理這些案例。

此外,如果程序正常退出,庫可以“隱藏”某些清理功能。

這取決於...

...關於資源類型。

最佳實踐

做免費的文件描述符。 (但操作系統為您關閉它們。)

關閉緩沖文件和數據庫連接。 (但是標准輸出緩沖區將在exit(3)main()返回時刷新。

但是在退出之前不要釋放已分配的內存。 這是一個很大的浪費時間,並可能導致讀取永遠不會使用的頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM