大型C 專案如何檢測記憶體洩漏?

時間 2021-06-03 03:07:57

1樓:jack

生產環境是linux?用的是glibc的new/delete, malloc/free,可能需要"malloc_trim"

#include

/* Release all but __pad bytes of freed top-most memory back to the system.

* Return 1 if successful, else 0.

*/int

malloc_trim

(size_t

__pad

);一些可能相關的操作

#include

/* Map addresses starting near ADDR and extending for LEN bytes.

* from OFFSET into the file FD describes according to PROT and FLAGS.

* otherwise the system chooses a convenient nearby address.

*/void

*mmap

(void

*__addr

,size_t

__len

,int

__prot

,int

__flags

,int

__fd

,__off_t

__offset

);void

*mmap64

(void

*__addr

,size_t

__len

,int

__prot

,int

__flags

,int

__fd

,__off64_t

__offset

);* Returns 0 if successful, -1 for errors (and sets errno).

*/int

munmap

(void

*__addr

,size_t

__len

);頻繁分配/釋放記憶體的場景可以嘗試TCMalloc(google-perftools)

2樓:Xi Yang

寫個檢測基類,構造的時候把自己放進乙個全域性鍊表裡,析構的時候自動摘出去。然後你檢查那個全域性鍊表,就能知道有哪些物件在裡面。程式退出的時候檢查,就能知道誰(在檢查的時候)沒析構。

C 記憶體洩漏的各種姿勢有哪些?

以前寫過乙個迴圈引用的lambda,本意是想遞迴的 auto f std make shared std function f fif f else return 擼喵程式設計師 unique ptr ptr make unique bar ptr.release return 暮無井見鈴 std ...

c 怎麼檢測記憶體洩露,怎麼定位記憶體洩露?

忘憂北萱草 C Bulilder 2007以上版本支援 ReporterMemoryLeakOnShutdown 變數,設定為 True 就能自動監測記憶體洩露。 低球 有興趣的話可以看看這個 裡面有很多很詳細的文件。ASAN的話效能也是很不錯的,wiki裡面也有和其他工具的比較 比如 Valgri...

如何排查大型C程式中的記憶體寫越界導致的coredump?

我看了一圈,咋就沒看到想要得呢?你們大型環境下,使用得難道都不是交叉環境嘛?難道沒有低於ASan得版本嘛?varling用不起來,這種問題看i r sp i r fp 各種附近都看。可是沒用啊?哎 Xi Yang 這非常困難。堆疊不一定有卵用,因為很容易是隔著老遠的地方寫壞了什麼東西,到這裡才死。不...