相关疑难解决方法(0)

Linux分配器不会释放小块内存

Linux glibc分配器似乎表现得很奇怪.希望有人可以对此有所了解.这是我的源文件:

first.cpp:

#include <unistd.h>
#include <stdlib.h>
#include <list>
#include <vector>

int main() {

  std::list<char*> ptrs;
  for(size_t i = 0; i < 50000; ++i) {
    ptrs.push_back( new char[1024] );
  }
  for(size_t i = 0; i < 50000; ++i) {
    delete[] ptrs.back();
    ptrs.pop_back();
  }

  ptrs.clear();

  sleep(100);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

second.cpp:

#include <unistd.h>
#include <stdlib.h>
#include <list>

int main() {

  char** ptrs = new char*[50000];
  for(size_t i = 0; i < 50000; ++i) {
    ptrs[i] = new char[1024];
  }
  for(size_t i = …
Run Code Online (Sandbox Code Playgroud)

c++ memory heap allocation

15
推荐指数
3
解决办法
3549
查看次数

如何从std :: deque中释放内存?

我用a std::deque来存储相当多的对象.如果我删除了一堆这些对象,在我看来它的内存使用量并没有减少,与std :: vector类似.

有没有办法减少它?我知道在矢量中你必须使用'交换技巧',我认为它也适用于此,但我宁愿避免使用它,因为它需要复制容器中剩下的所有元素(因此需要你有足够的内存来存储每个对象两次).我并不熟悉deque的实现,但我对它的理解是,有可能在没有大量副本的情况下实现这样的事情(而使用矢量显然不是这样).

我正在使用VC++(Dinkumware)STL,如果这有任何区别的话.

c++ stl deque

9
推荐指数
2
解决办法
8000
查看次数

标签 统计

c++ ×2

allocation ×1

deque ×1

heap ×1

memory ×1

stl ×1