【问题标题】:Difference between TBB Concurrent Vector and STL Vector?TBB并发向量和STL向量的区别?
【发布时间】:2013-04-09 10:33:57
【问题描述】:

TBB Concurrent Vector 我们可以通过grow_by 和grow_to_at_least 来动态调整大小。而STL Vector 中也有resize 函数。那么有什么区别呢?

我遇到的不同是

1. concurrent_vector 在数组被清除之前永远不会移动元素,这比 STL std::vector(可以移动元素以调整向量的大小)具有优势,即使对于单线程代码也是如此。

2。仅当您确实需要在其他访问正在进行(或可能正在进行)时动态调整它的大小,或者如果您要求元素永不移动时,才使用 concurrent_vector。

由于我对此感到困惑,任何人都可以解释这些观点吗?

【问题讨论】:

    标签: c++ stl tbb


    【解决方案1】:

    我的意思是,一旦在 concurrent_vector 中分​​配了内存,它就会一直被使用,而 std::vector 在用完时分配两倍的内存并将存储的对象移动到新分配的块中。

    concurrent_vector,我假设,正在添加新的内存块,但继续使用旧的。 不移动对象很重要,因为它允许其他线程在重新调整大小时继续访问向量。它可能还有助于其他优化(例如保持缓存副本有效。) 缺点是访问元素的速度稍慢,因为需要首先找到正确的块(额外的尊重。)

    这里是std::vector内存分配的解释:How is dynamic memory managed in std::vector?

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多