我有一個C++程序,其駐留內存增加緩慢,而其虛擬內存基本上保持不變。那麼這是內存泄漏嗎?C++:當駐留內存緩慢增加時是否存在內存泄漏?
閱讀一些文章,並運行一些測試後,我發現,如果空閒內存是2G(使用free
命令),並運行此代碼:
int main() {
while (1) {
int* a = new int[100000];
}
}
使用top
命令可以看到駐地記憶小於2G,並保持不變,但虛擬內存增長如此之快。
所以無論我可以說,
當有內存泄漏,虛擬內存必須增加。
但如果駐留內存上上下下,虛擬內存保持不變,它不是內存泄漏
編輯:我做這在Linux上
我重寫我的代碼:
#include <iostream>
int main() {
while (1) {
int* a = new int[100000];
std::memset(a, 0, sizeof(a));
a[0] += 1;
}
}
和免費命令: total used free shared buffers cached Mem: 3 0 3 0 0 0 -/+ buffers/cache: 0 3 Swap: 3 0 3
當運行代碼以上:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8518 wq 20 0 358g 2.9g 704 R 53.9 73.8 0:09.13 a.out
的RES
增加至〜3G,然後停止,也如下代碼:
#include <iostream>
int main() {
while (1) {
int* a = new int[100000];
}
}
所以最後一個問題,在這種方式駐留存儲器增加,但不是虛擬的,我可以說可能是空閒的內存增加,操作系統可以分配更多的物理內存進度
您正在運行的操作系統/運行時足夠聰明,可以注意到您從未實際使用過您分配的內存。它只會將記憶標記爲「保留」給你,但在你使用它之前不會實際給你。嘗試將一些數據寫入分配的內存並查看它的變化。 – nwp
有一個'new'沒有匹配'delete'就是內存泄漏,句號。 – NathanOliver
這是一個沒有明顯副作用的無限循環。這是未定義的行爲。 –