什么是在C++中复制数组的最快的可移植方式

Han*_*ans 16 c++ arrays copy

这个问题困扰了我一段时间.我正在考虑的可能性是

  1. 的memcpy
  2. 性病::复制
  3. cblas_dcopy

有没有人知道这三者的利弊是什么?其他建议也欢迎.

Dre*_*all 26

在C++中,您应该默认使用std :: copy,除非您有充分的理由不这样做.原因是C++类通过复制构造函数和复制赋值运算符以及列出的操作定义了自己的复制语义,只有std :: copy遵循这些约定.

memcpy()使用原始的,按字节顺序的数据副本(尽管可能对缓存行大小进行了大量优化等),并忽略了C++复制语义(毕竟它是一个C函数......).

cblas_dcopy()是一个专用函数,用于使用双精度浮点值的线性代数例程.它可能擅长,但不应被视为通用目的.

如果您的数据是"简单"POD类型结构数据或原始基本类型数据,则memcpy可能会尽可能快.同样可能,std :: copy将在这些情况下进行优化以使用memcpy,因此您永远不会知道其中的区别.

简而言之,使用std :: copy().