std :: copy vs memcpy的效率

时间:2011-09-02 15:46:17

标签: c++ performance stl

使用memcpystd::copy之间的效率损失有多严重?

我的情况是我的系统上的向量实现似乎没有使用连续内存,这使得我必须稍后std :: copy其内容而不是memcpy(dest, &vec[0], size);。我不确定这可能会对效率造成多大影响。

3 个答案:

答案 0 :(得分:13)

在可能的情况下(即元素类型是POD),一个相当不错的实现将std::copy编译到调用memmove

如果您的实现没有连续存储(C ++ 03标准要求它),memmove可能比std::copy快,但可能不会太多。只有当你有测量结果表明它确实是一个问题时,我才开始担心。

答案 1 :(得分:13)

虽然你已经得到了很多好的答案,但我觉得有必要补充一点:即使代码在理论上效率较低,也很少有可能产生任何真正的差异。

原因很简单:在任何情况下,CPU都比内存快很多。即使相对蹩脚的代码仍然容易使CPU和内存之间的带宽饱和。即使所涉及的数据在缓存中,同样的通常仍然是正确的 - 并且(再次)即使使用蹩脚的代码,移动也会很快完成,无论如何都要关注。

相当多的CPU(例如,Intel x86)在硬件中都有一条特殊的路径,在任何情况下都会用于大多数移动,因此在实现之间通常存在 no 的速度差异即使在汇编代码级别,它看起来也有点不同。

最终,如果你关心在内存中移动内容的速度,你应该更多地考虑消除它而不是让它更快。

答案 2 :(得分:6)

std::copy会在适当时使用memcpy,因此您只需使用std::copy并让它为您完成工作。