還沒遇到過windows的大型開發,最近在做乙個區域網下面的管理工具。nmon+socket+select程式設計。
在編寫df -h模組的時候,總是遇到記憶體洩漏的問題,由於平時寫c的時候很注意記憶體洩漏的問題。所以對於malloc,calloc,realloc,fopen等都是十分小心的。
小工具主要包括4個方面,cpu資訊,記憶體資訊,磁碟容量資訊,磁碟讀寫資訊,網路資訊,以及程序資訊。
前幾項測試很容易也很快完善了,但是記憶體測試的時候,發現了記憶體洩漏問題。(我自己認為linux一些基本的記憶體洩漏檢測不是很難,ps選出程序號,top -p pid檢測程式的記憶體)
發現了,程式的記憶體消耗為線性增長,初步判定記憶體洩漏。一開始把每個模組都檢測一邊,涉及到calloc(個人比較喜歡用calloc),斷點除錯後都進入到相應的free函式裡面了。總**越有5000行,這就很讓人鬱悶了。我把幾個模組都去掉,發現主體部分不存在記憶體洩漏。最後沒辦法,採用了模組分離,乙個模組乙個模組加,終於看到了df -h的實現部分存在記憶體洩漏。
但是這個模組是呼叫底層vfs介面(抄原始碼),沒想通為什麼。最後看到有個file指標操作setmntend();一想file指標應該關閉呀,沒有關閉,至此讓我苦比兩天的記憶體洩漏才得以解決。
記憶體洩漏必須要分排查每乙個malloc和對應的free,但是也不能忘記fopen,fclose。
記憶體洩漏小記
記憶體託管語言中的記憶體洩漏產生的主要原因 保留下來卻永遠不再使用的物件引用。典型的演算法是 1 檢查結果是否在快取中,如果在,就返回結果。2 如果結果不在快取中,就進行計算。3 將計算出來的結果新增到快取中,以便以後對該操作的呼叫可以使用。注意 該演算法的問題 或者說是潛在的記憶體洩漏 出在最後一...
關於記憶體洩漏
首先我們要知道js的垃圾 機制,就是找出不用的變數,釋放掉其占用的記憶體。垃圾 機制會按照固定的時間間隔週期性的執行。判斷哪個變數沒用有兩個方法 標記清除和引用計數 當變數進入環境時,例如,在函式中宣告乙個變數,就將這個變數標記為 進入環境 從邏輯上講,永遠不能釋放進入環境的變數所占用的記憶體,因為...
關於 記憶體洩漏,野指標
記憶體洩漏 動態申請的記憶體空間沒有正常釋放,但也不能繼續使用 char a new char a char b new char b a b a 的空間未被釋放,也無法訪問,形成記憶體洩漏 基類的析構函式應設定為virtual,否則基類指標指向子類物件,呼叫基類析構時不會呼叫子類的析構函式,而造成...