我在Linux下的ARM CPU硬件上執行C++代碼。我在硬件上運行我的二進制文件,並持續監視我的進程,以查看它的內存使用量是否隨着時間的推移而增長,每隔半小時。C++代碼內存泄漏
top -p pid-of-process
看到列:RES內存和MEM%的最高輸出
,並檢查
cat /proc/pid-of-process/status
看場VMRSS:這是駐留集大小的記憶裏,處理。
我發現VMRSS和RES內存每1小時會持續增加數百KiloBytes。該進程正在運行,沒有測試正在運行,所以它始終在做同樣的事情,並且加載不會改變。
現在的問題我的是:這是否意味着我的代碼中可能存在內存泄漏。
或者這個增加是否可以歸因於別的東西,如果有的話?
要檢查是否存在內存泄漏:
我審查代碼,看看每一個新的(動態內存運營商)有一個相應的刪除(空閒內存)
跑Valgrind的全過程memcheck,並在報告中沒有看到任何泄漏。我看到
絕對丟失:0字節0塊
間接丟失:0字節0塊
可能丟失:1008個字節7塊
* *編輯:回答下面的arne的評論。可能丟失的塊來自pthread_create和glibc,所以不知道這是怎麼回事?在5個街區
720個字節可能失去在損失記錄56的27
== 11151 ==在0x402732C:釋放calloc(vg_replace_malloc.c:467)
== 11151 ==通過0x4010C34 :allocate_dtv(DL-tls.c:300)
== 11151 ==由0x40113D8:_dl_allocate_tls(DL-tls.c:464)
== 11151 ==由0x404746C:在pthread_create @@ GLIBC_2。 1(allocatestack.c:571)**
隨着時間的推移,這種內存增加會是什麼?我如何進一步調試以找出原因?
你是否重新檢查過「可能丟失」的內存區域?它相當於1k,所以每小時可能有幾百k時。 – arne
'valgrind'只檢查「孤立」(或「廢棄」)的內存。很高興接受'vector v; int i = 0; for(;;)v.push_back(i ++);'或類似的東西。換句話說,對於以荒謬的方式「收集」數據的功能來說,這沒有任何幫助。當然,如果你不幸,這可能發生在一些輔助庫中,而不是你自己的代碼中。 –
@Mats Petersson關於代碼的初始審查,我不認爲有任何C++ STL/libstdC++容器被使用,甚至標準數據類型數組以正常的方式被使用 – goldenmean