|
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,
|
![]() |
Zax Ftw · 如何获取用于memcpy的浮点地址? 7 年前 |
![]() |
Nivs · 为什么我的代码覆盖常量int x=*(&y);工作 7 年前 |
|
Niluka · 使用memcpy将二维动态数组(指针)复制到静态数组 7 年前 |
|
andrew1601 · 使用memcpy〔closed〕获取分段错误 9 年前 |
![]() |
luke · 在malloc之后修改字符串时,“释放后修改的空闲堆块” 10 年前 |
![]() |
Angus · 了解memcpy()的实现 11 年前 |
![]() |
Ruud · 快速复制`std::vector<std::uint8_t>` 12 年前 |