c++ - C++ STL vector 保留太多容量会消耗大量内存吗?

标签 c++ memory vector stl

<分区>

在我的代码中,如果我调用 vector::reserve(capacity) 并为 vector 分配比实际需要更多的容量来保存元素,那么在我的程序运行期间,vector 是否会始终保存内存,不释放资源和成本?如果是这样,那不是一种内存浪费吗?

我是否可以冒险尝试将保留容量降低到 vector 的预期大小,这是否会使程序运行健壮并且可能运行得更快?

这会降低内存不足的可能性吗?

我的代码是在手机上跑的,计算量大,所以还是要考虑内存开销。

最佳答案

will the vector always holds the memory, not releasing resource and costs kind of memory waste?

vector 不会释放/重新分配内存。

如果它重新分配了内存,那么所有引用存储在该 vector 中的元素的迭代器、引用和指针都将失效,恕不另行通知。

Can I risky trying to lower the reserve(capacity) to the anticipated size of vector and make the program run robust and maybe faster?

我想说的是,如果您知道 vector 大小最终将达到恒定大小或具有最小大小,则调用 reserve 是一个很好的做法。否则,将失去对 reserve 的调用。让 vector 做自己的计算。你会意识到 vector 重新分配可能不是你程序的瓶颈。

您还可以调用 shr​​ink_to_fit 来确保您的 vector 使用的内存量恰好是它需要的。

关于c++ - C++ STL vector 保留太多容量会消耗大量内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350839/

相关文章:

vector - 如何访问向量向量中的特定元素 clojure

c++ - 删除指向抽象类的指针 vector

c++ - C++中类数据成员的初始化

c++ - 使用 > 2GB 内存时,Cygwin g++ x86_64 段错误(核心已转储)

c++ - delete[] 字符数组

C:内存中的循环、条件、结构

c++ - 如何在不丢失现有数据的情况下调整 std::vector 的大小?

c++ - 将 C++ 对象转换为 void* 的安全/标准方法

c++ - 查找模板相等运算符

c++ - std::vector::erase() 是否真的在删除点使迭代器无效?