【发布时间】:2013-07-27 02:07:01
【问题描述】:
哪个最快? boost::multi_array 还是 std::vector?
我将(不是恒定的)17.179.869 个元素存储在 3 个维度中,需要在 for 循环中非常快速且非常频繁地访问这些元素。最有表现力的会是什么? std::vector 还是 boost::multi_array?
(我不希望它在一秒钟内完成,但我希望它尽可能高效,因为纳秒的差异可以节省大量时间。)
【问题讨论】:
-
如果您关心,请同时实施并衡量......
-
取决于您的迭代方式以及是否在 POD 上进行迭代。 std::vector 作为一个扁平数组,如果您在最小维度上迭代并使用指针而不是 [] 或迭代器运算符进行迭代,则很可能是最快的。如果您对元素进行大量处理,这真的不会有太大的不同。
-
@MadScienceDreams:我相信Boost.MultiArray 也存储在一个连续的块中。来自
data访问器的概要: 这将返回一个指向包含数组数据的连续块的开头的指针。 [...] -
@MadScienceDreams 使用指针而不是普通的 [] 将加载时间从 61 秒增加到 188 秒。
-
@Binero 那是……奇怪。如果您获得一次指针(即 ptr=&arr[0]),然后在迭代期间递增指针(即 ptr++),那么在最坏的情况下性能应该大致相同,但预缓存应该使它变得微不足道。
标签: c++ arrays performance stdvector boost-multi-array