当前位置:  开发笔记 > 编程语言 > 正文

清理每个循环迭代的向量.什么是最有效的内存方式?

如何解决《清理每个循环迭代的向量.什么是最有效的内存方式?》经验,为你挑选了4个好方法。

我有一个关于std :: vector的问题.

我有一个非常内存密集的算法,我预测到预测矢量大小并提前为矢量保留足够的内存将帮助我减少内存使用量.

以下哪项更好:

for ( ... ) {
  std::vector my_vector;
  my_vector.reserve(stuff_count);
  // Do stuff , and append stuff to my_vector.
}

或这个:

std::vector my_vector;
for ( ... ) {
  my_vector.clear();
  my_vector.reserve(stuff_count);
  // Do stuff , and append stuff to my_vector.
}

请告诉我哪个是最好的,或者是否有更好的做事方式.

非常感谢你提前!



1> sharptooth..:

使用第一个变体,您可以在每次迭代时重新分配向量的缓冲区 - 这通常非常昂贵.使用第二个变体,您只需偶尔重新分配.第二种变体更好,因为速度是您的首要任务.

你不清楚问题的元素数量来自何处.也许你甚至可以快速计算所有迭代的最大元素数,将其设置为缓冲区大小并且没有重新分配.



2> Pete Kirkham..:

我预测,预测矢量大小并预先为矢量保留足够的内存将有助于减少内存使用量.

尝试并表现得像工程师而不是算命先生.创建一个测试,并测量差异.



3> Maurice Perr..:

第二个可能会稍快,但我发现第一个更清洁.



4> 小智..:

由于代码中的差异微不足道,为什么不测试这两种方法,看看哪种方法最适合您的特定应用?

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有