wil*_*ell 31
boost::array(或C++ 0X的std::array)应该比更快std::vector,因为boost::array实例是完全在堆栈中.这意味着boost::array没有堆分配,这也意味着它不能超过您在构造时为其指定的大小.
的目的boost::array是作为围绕基本数组薄薄的一层,所以你可以把它们与标准集装箱.begin(),.end()等良好的编译器应该消除所有开销boost::array,使得它执行相同的原始人阵列.
所有这些都涉及"默认"设置,您没有自定义分配器,您可以测量简单的事情,如数组构造,访问和元素修改.另一方面,事情可以在其他测试,其他平台或聪明的设置中转变.例如,
std::vector可能不再那么昂贵.std::vector与另一个交换通常是非常快速的操作; 交换两个指针的速度.交换两个boost::array实例可能要贵得多; 按复制n元素的顺序.但是,在C++ 0x中,std::array它将成为其中的一部分,由于rvalue引用及其移动语义,交换两个数组将再次快速.boost::array可能需要复制每个数组元素.然后,有时复制任何对象非常快,甚至比复制指针甚至在C++ 03编译器中更快 - 感谢copy elision.您可以查看哪个更快,以供您使用,但即使是此测试也只能让您了解特定平台上特定版本的特定编译器.
Naw*_*waz 17
得出任何结论的最佳方法是编写程序以使用大量数据测试其性能.怎么还能得出任何结论呢?
在您使用它时,您可能需要一些工具来帮助您,例如VTune或AMD CodeAnalyst Performance Analyzer等.Every Sleepy(免费工具)是Windows系统的C/C++ CPU分析器.你可以尝试一下!
GMa*_*ckG 12
更快的是什么?std::vector输入速度更快,因为它的字符少一个.
无论什么更快,你要比较两个不同的东西,一个静态大小的数组和一个动态大小的数组.使用哪个取决于您的应用程序,与速度无关.
你想在某个地方经营飞机或汽车吗?这取决于更多只是"更快".
一个boost::array可能更快分配,因为它是,典型的机器,在堆栈上.或者std::vector由于一些自定义内存分配方案可能几乎一样快.
但这只是分配.怎么用?那么两者都只是一个数组的索引,所以也许没有区别.但是移动或交换呢?boost::array当然不能那么快,因为std::vector只需要移动/交换指针.或许不是,谁知道呢?
你必须剖析并查看组件.没有人能够神奇地知道事情对你的影响.
| 归档时间: |
|
| 查看次数: |
13892 次 |
| 最近记录: |