2013-04-09 46 views
2

TBB并行向量,我们可以动态地在STL矢量使用grow_by和grow_to_at_least。而且这里还调整。所以有什么区别功能调整?TBB并发向量和STL向量之间的区别?

其中我碰到所不同的是

1.一种concurrent_vector直到阵列被清除从不移动的元件,其可以是一个优点在STL的std ::载体(其可移动元件来调整矢量),即使对于单线程代码也是如此。

2.使用concurrent_vector只有当你真的需要动态调整它,而其他的访问是(或可能)在飞行,或者您需要一个元素从来没有移动。

谁能请解释这点,因为我在这混乱?

回答

3

我得到这意味着,一旦存储在concurrent_vector分配它总是使用,而不是为std ::矢量当它运行和移动存储到新分配的块中的对象,其分配两倍的内存。

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

这里的解释的std ::矢量存储器分配:How is dynamic memory managed in std::vector?