调整std :: swap接口以交换n个字节

时间:2015-02-10 09:28:24

标签: c++ swap

我有一个C函数来交换任意数量的字节:

void my_swap(void* a, void* b, long n);

我做了一些有几种类型的benckmark,我发现std::swap胜过my_swap

所以,我想用std::swap接口包裹my_swap,但我无法弄清楚如何告诉std::swap表现得好像交换两个变量的键入Tsizeof(T)==n

任何人都可以将std::swap包含在具有相同签名的函数中(当然,语义相同)my_swap吗?

1 个答案:

答案 0 :(得分:4)

不可能,因为std :: swap必须确切知道传递的变量的类型。

为什么my_swapstd::swap慢,可能有几个原因,例如:

  • 您的函数逐字节传输,这通常比在int上执行相同操作的速度慢4 *(或更多)
  • 编译器生成较慢的代码,因为它无法确定这两个void*变量指向" unaliased"记忆(特别是,你指向记忆的操作不会到达可能与另一个重叠的区域)。编译器不允许为这种情况生成快速代码,因为如果出现重叠,将导致错误的数据操作。

这就是为什么不可能将my_swap的实现编写得那么快std::swap,因为这个void*作为参数是原因。