c++ - 如何从 std::vector 恢复内存?

标签 c++ memory stl vector

<分区>

Possible Duplicate:
How to downsize std::vector?
C++ vector::clear

当我调用 vector<double>::clear()在一些大尺寸 vector 上,我没有在任务管理器/性能中看到返回给系统的内存。

显然这是因为容器 expects you will use that same memory again .我不会再使用那 block 内存,一旦任务完成,内存最好归还给系统。

有没有办法确保内存立即返回给系统,除了使用像vector<double> * v这样的指针/调用 deletev我们什么时候想把内存归还给系统?

最佳答案

C++11 引入了应该执行此操作的 shr​​ink_to_fit 方法(请注意,它并不严格保证有效,但很可能会有效):

your_vector.clear();
your_vector.shrink_to_fit();

如果您不能使用 C++11 功能,那么您可以使用以下技巧,这将清除您的 vector 并释放它使用的所有内存:

std::vector<double>().swap(your_vector);

也就是说,有可能即使 vector 将释放它分配的任何内存,分配器也不会将内存返还给操作系统。但至少此内存可用于应用程序的其他部分。

关于c++ - 如何从 std::vector 恢复内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020933/

相关文章:

c++ - 如何从静态 C 和 C++ 库创建共享 C 库?

memory - 如果数量匹配,为什么我的 Pod 不满足资源配额限制?

c++ - 是否可以在 Linux 中将数据写入自己的标准输入

c++ - 从 Qt Designer 将 QWidget 提升为 QMainWindow 或将 QMainWindow 添加到 QWidget

c - 重新分配使用太多内存

C++ STL Containers 无一异常(exception)都无法使用,我们能做些什么呢?

qt - 如何在std::iostream中使用QFile?

c++ - STL 列表删除项

python - 如何在 Windows 上安装 opencv_contrib?

c - 内存分配,输出垃圾