TBB并发向量和STL向量之间的区别?

时间:2013-04-09 10:33:57

标签: c++ stl tbb

TBB Concurrent Vector我们可以使用grow_by和grow_to_at_least动态调整大小。在STL Vector中还有resize函数。那有什么区别?

我遇到的差异是

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

2。仅当您确实需要动态调整大小时才使用concurrent_vector,而其他访问是(或可能)在飞行中,或者如果您需要元素永远不会移动。

有人可以解释这些要点,因为我对此感到困惑吗?

1 个答案:

答案 0 :(得分:3)

我认为这意味着一旦在concurrent_vector中分配了内存,它总是被使用,而不是std :: vector,当它耗尽时分配两倍的内存并将存储的对象移动到新分配的块。

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

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