Joh*_*0te 6 c++ performance stl
使用memcpy和std::copy?之间的效率损失有多严重?
我有一种情况,我的系统上的矢量实现似乎没有使用连续的内存,这使得我必须稍后std ::复制其内容而不是做memcpy(dest, &vec[0], size);.我不确定这可能会对效率造成多大影响.
R. *_*des 13
在可能的情况下(即元素类型是POD),一个相当不错的实现将std::copy编译到调用memmove.
如果您的实现没有连续的存储(C++ 03标准要求它),memmove可能会快std::copy,但可能不会太多.只有当你有测量结果表明它确实是一个问题时,我才开始担心.
Jer*_*fin 13
虽然你已经得到了许多好的答案,但我还是有必要补充一点:即使代码在理论上效率较低,也很少有可能产生任何真正的差异.
原因很简单:在任何情况下,CPU都比内存快很多.即使相对蹩脚的代码仍然可以轻松地使CPU和内存之间的带宽饱和.即使所涉及的数据都在缓存中,通常也是如此 - 并且(再次)即使使用蹩脚的代码,移动也会很快完成,无论如何都要关注.
相当多的CPU(例如,Intel x86)在硬件中都有一条特殊的路径,在任何情况下都会用于大多数移动,所以在实现之间的速度通常没有区别,即使在程序集中看起来也有点不同代码级别.
最终,如果你关心在内存中移动内容的速度,你应该更多地考虑消除它而不是让它更快.
std::copy将memcpy在适当时使用,因此您应该使用std::copy并让它为您完成工作.
| 归档时间: |
|
| 查看次数: |
8664 次 |
| 最近记录: |