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 這非常困難。堆疊不一定有卵用,因為很容易是隔著老遠的地方寫壞了什麼東西,到這裡才死。不...