证明shrink_to_fit或swap保证释放向量的内存

时间:2017-08-20 15:46:23

标签: c++ memory vector

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

vector<double> vec;
//populating vec here

清理:

1-缩小以适应方法

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

2-交换方法

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

1 个答案:

答案 0 :(得分:1)

使用pcl::visualization::PCLVisualizer创建vector不太可能做我认为你想做的事。

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

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

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