证明shrink_to_fit或交换保证释放矢量的内存

Proof that shrink_to_fit or swap guarantees to release vector's memory

本文关键字:释放 内存 交换 to shrink fit 证明      更新时间:2023-10-16

任何人都可以提供证据证明以下方法之一提供了以独立于平台的方式释放矢量内存的保证吗?

vector<double> vec;
//populating vec here

清理:

1-收缩以适合方法

vec.clear(); 
vec.shrink_to_fit();

2- 交换方法

vector<double>().swap(vec);

使用new创建vector不太可能做我认为你想做的事情。

std::vector实现通常只"保证"它们将分配足够的内存来容纳最少数量的元素。后者很重要,因为在需要增大矢量时要求操作系统或运行时提供更多内存是一项昂贵的操作,也可能触发元素复制。出于这个原因,许多实现使用一些启发式方法来确定当向量必须增长到一定大小时分配的大小。例如,我熟悉的一个实现会在每次需要新内存时将分配大小加倍,从而为您提供 2^x 分配模式。

对于这样的分配模式,尝试将向量从 90 个元素缩小到 70 个元素几乎可以保证保持分配的内存大小相同,以便为额外的增长空间预留空间。

如果您出于某种原因需要确切的内存分配大小,如果您知道编译时的大小,您几乎必须使用std::array,或者自己管理数组。