为什么RES保持缓慢增长?

时间:2019-01-10 06:52:11

标签: c++ memory-leaks

我编写了一个简单的程序来查看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(免费通话后)保持缓慢增长,为什么?

加上:我担心它会一直增长,并最终耗尽系统的内存,尽管可能要花费很多年。

0 个答案:

没有答案