c++ - 清除后是否释放了 std::vector 内存?

标签 c++ optimization memory vector

假设我有一个 std::vector 结构。如果 vector 是 clear()'d,内存会发生什么?

std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();

内存会被释放,还是仍然作为可重用缓冲区附加到 vecs 变量?

最佳答案

内存仍然附着在 vector 上。这也不仅仅是可能的。这是必需的。特别是,如果您在调用 clear() 后再次向 vector 添加元素,则 vector 不得重新分配,直到您添加的元素数量超过其先前大小的 1000 个。

如果你想释放内存,通常是用一个空 vector 交换。 C++11 还添加了 shrink_to_fit旨在更直接地提供大致相同功能的成员函数,但它是非绑定(bind)的(换句话说,它可能会释放额外的内存,但仍然不是真正需要这样做)。

关于c++ - 清除后是否释放了 std::vector 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944886/

相关文章:

C++ 仅在 std::map 中初始化键

javascript - Javascript的优化建议

mysql - 如何显示SQL查询的访问路径

c++ - socketpair() & 在 worker socket 的 close() 之后创建新的子进程

c++ - 使用 FFmpeg 解码视频帧时获取的撕裂图像

c++ - 未在此范围内声明(C++中的数组)

numpy - 在 numpy 中创建倾斜/连续移位矩阵的最快方法

c - 当我再次 malloc 时,free(struct variable) 不会清除与该变量关联的先前存储的值?

php - 如何在 PHP 中发出内存使用警告?

c++ - 为什么用空函数运行 std::thread 会消耗大量内存