函数调用后为什么内存不释放?

时间:2014-11-24 10:35:38

标签: c++ memory stl heap-memory htop

请参阅下面的代码:

void foo() {
  std::ifstream f("data");
  string line;
  vector<string> r;
  while(getline(f, line)) {
    r.push_back(line);
  }
  f.close();
  r.resize(0);
}

int main(int argc, char *argv[])
{
  foo();
  cout << "load done" << endl;
  while(1) {;}
  return 0;
}

我使用while(1)循环检查htop工具中的内存使用情况,r可能使用5GB RES,但在load done打印后,RES仍然占用5GB。问题是什么?

2 个答案:

答案 0 :(得分:2)

调整大小并不能保证释放底层内存。

您应该尝试使用shrink_to_fit,这会降低内容的容量以适应其大小。

答案 1 :(得分:0)

我认为来自vector klass的擦除和/或清除函数会为你做到这一点。 矢量的非常好的文档也在cpusplus.com