內(nèi)存泄漏和內(nèi)存溢出 如何檢測C 的內(nèi)存泄漏,用哪些工具?
如何檢測C 的內(nèi)存泄漏,用哪些工具?你好,我很高興為你回答。如何檢測內(nèi)存泄漏:檢測內(nèi)存泄漏的關(guān)鍵是攔截對分配內(nèi)存和釋放內(nèi)存的函數(shù)的調(diào)用。通過截取這兩個函數(shù),我們可以跟蹤每個內(nèi)存塊的生命周期。例如,每
如何檢測C 的內(nèi)存泄漏,用哪些工具?
你好,我很高興為你回答。
如何檢測內(nèi)存泄漏:
檢測內(nèi)存泄漏的關(guān)鍵是攔截對分配內(nèi)存和釋放內(nèi)存的函數(shù)的調(diào)用。通過截取這兩個函數(shù),我們可以跟蹤每個內(nèi)存塊的生命周期。例如,每次成功分配內(nèi)存塊時,其指針都會添加到全局列表中;每次釋放內(nèi)存塊時,其指針都會從列表中刪除。這樣,當程序結(jié)束時,列表中剩余的指針指向尚未釋放的內(nèi)存。這只是對內(nèi)存泄漏檢測基本原理的簡單描述。有關(guān)詳細算法,請參閱Steve Maguire的>。
如果要檢測堆內(nèi)存泄漏,需要截獲malloc/realloc/free和new/delete(事實上,malloc/free也用于new/delete,所以只需要截獲上一個組)。對于其他泄漏,可以使用類似的方法攔截相應(yīng)的分配和釋放函數(shù)。例如,要檢測BSTR的泄漏,需要截獲sysallocstring/sysfiresting;要檢測hmnu的泄漏,需要截獲createmenu/destroymenu。(有些資源有多個分配功能,只有一個釋放功能。例如,sysallocstringlen也可以用來分配BSTR。在這種情況下,需要截獲多個分配函數(shù))
在windows平臺上,有三種常用的檢測內(nèi)存泄漏的工具:MSc runtimelibrary內(nèi)置檢測函數(shù);插件檢測工具,如purify、boundschecker等;使用windowsnt的性能監(jiān)視器。這三種工具各有優(yōu)缺點。雖然MSc運行庫在功能上比插件工具弱,但它是免費的。雖然性能監(jiān)視器不能識別出有問題的代碼,但是它能夠檢測出隱式內(nèi)存泄漏的存在,這是其他兩種工具所無法檢測的。