【发布时间】:2022-01-08 12:57:39
【问题描述】:
这是一个简单的演示,只是循环使用malloc() 和free()。
#include <cstdio>
#include <cstdlib>
#include <cmath>
int main(int argc, char **argv) {
int mallocTime = 100000;
for (int i=1; i<=mallocTime; i++) {
int size = (rand()%1024*1024*30);
char *a = (char*)malloc(size);
free(a);
}
int v; {
// Pause program.
scanf("%d", &v);
}
return 0;
}
我注意到,当mallocTime 变大时,我的记忆就会增长。
这是mallocTime = 0时的内存状态
root 21416 0.0 0.0 6568 1712 pts/4 S+ 20:53 0:00 ./a.out
此时mallocTime = 100000
root 21786 0.0 0.5 37328 22204 pts/3 S+ 20:55 0:00 ./a.out
如您所见,VSZ 和 RSS 都在增长。
我想知道为什么,很明显我正确地释放了内存,为什么它仍然增长?增加的内存字节数是多少?
【问题讨论】:
-
操作系统是Debian10
-
free一般会释放内存供进程内其他用途;它不一定将它从进程释放到操作系统。 -
您的问题与内存泄漏和 linux 内核毫无共同之处。不要使用不相关的标签