Halcom 发表于 2024-1-5 21:14:04

C++内存管理

在C++中,std::vector 是一种动态数组,其内存管理是通过标准库自动完成的。std::vector 会根据需要自动增长,并在不再需要时自动收缩。

当 std::vector 的容量(capacity)超过其当前大小(size)时,它会自动分配更大的内存块并将所有元素复制到新内存块中。当 std::vector 的大小减小,并且其容量仍然大于当前大小时,std::vector 会保持该容量并重新分配内存,而不是释放未使用的内存。

如果你想释放 std::vector 占用的内存,可以将其大小设置为0,这将导致 std::vector 释放其内部数组的内存。例如:

cpp
复制
std::vector<int> vec;
// ... 使用 vec ...
vec.clear();// 将 vec 的大小设置为0,释放内存

如果你想完全重置 std::vector(包括释放内存并重置其状态),可以使用 std::vector::clear() 或 std::vector::swap() 方法:

cpp
复制
vec.clear();// 释放内存并设置大小为0

或者:

cpp
复制
std::vector<int>().swap(vec);// 用一个临时空 vector 交换 vec,这将释放 vec 的内存并重置其状态

请注意,当你删除 std::vector 的元素或将其容量设置为小于其当前大小时,它不会释放内存。这是为了提高性能,因为重新分配和复制元素的开销相对较大。如果你需要频繁地重新分配 std::vector 的大小,考虑使用其他数据结构或手动管理内存。

页: [1]
查看完整版本: C++内存管理