|
|
1
7
这个答案并不是msvc100特有的。 如果像中那样使用复制构造函数
otherVect的分配器对象也必须被复制(和使用),这需要付出更多的努力才能使其在STL实现中具有性能。 如果您只想复制 目录 其他车辆,使用
它使用newVect的默认分配器。 另一种可能性是
在这种情况下,在一个好的STL实现中,所有这些(包括其他Vect使用默认分配器时的复制构造函数)都应该归结为memmove/memcpy。请注意,otherVect与newVect具有完全相同的元素类型(例如“char”或“int8_t”)。 使用容器的方法通常比使用通用算法更具性能,因此,如果供应商没有充分优化容器,那么vector::resize()和std::copy()甚至memmove()/memcpy()的组合将是一种解决方案。 |
|
|
2
2
根据建议的解决方案,我决定制定一个小型基准。
在我的电脑上,使用msvc100为x64编译,经过充分优化,这会产生以下输出:
结果非常清楚:
编辑: 这一结论对其他编纂者来说并不明显。我也在64位Linux上进行了测试,Clang 3.2的结果如下
GCC 4.8给出了类似的输出。对于Windows上的GCC,
|
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 1 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 1 年前 |