我编写了一个简单的程序来查看VIRT和RES在top命令中的更改。我很好奇RES为什么会保持缓慢增长。
程序在以下系统中运行:
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
...
这是程序代码:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
using namespace std;
int main(int argc, char* argv[]) {
srand(time(nullptr));
while (true) {
int num = rand();
int size = 0;
if (num % 3 == 0) {
size = rand() % (1024 * 1024 * 500) + 1;
} else if (num % 3 == 1) {
size = rand() % (1024 * 1024) + 1;
} else {
size = rand() % 1024 + 1;
}
char* mem = (char*)malloc(size);
cout << "malloc " << size << endl;
sleep(1);
int use = max(rand() % size, 1);
memset(mem, 1, use);
cout << "use " << use << endl;
sleep(1);
free(mem);
cout << "free " << size << endl;
sleep(1);
}
return 0;
}
VIRT RES(KB)
47476 33840
47476 33856
47476 33868
47476 33872
47476 33896
47476 33900
我们可以看到,RES(免费通话后)保持缓慢增长,为什么?
加上:我担心它会一直增长,并最终耗尽系统的内存,尽管可能要花费很多年。