我有一个C函数来交换任意数量的字节:
void my_swap(void* a, void* b, long n);
我做了一些有几种类型的benckmark,我发现std::swap
胜过my_swap
。
所以,我想用std::swap
接口包裹my_swap
,但我无法弄清楚如何告诉std::swap
表现得好像交换两个变量的键入T
,sizeof(T)==n
。
任何人都可以将std::swap
包含在具有相同签名的函数中(当然,语义相同)my_swap
吗?
答案 0 :(得分:4)
不可能,因为std :: swap必须确切知道传递的变量的类型。
为什么my_swap
比std::swap
慢,可能有几个原因,例如:
void*
变量指向" unaliased"记忆(特别是,你指向记忆的操作不会到达可能与另一个重叠的区域)。编译器不允许为这种情况生成快速代码,因为如果出现重叠,将导致错误的数据操作。这就是为什么不可能将my_swap
的实现编写得那么快std::swap
,因为这个void*
作为参数是原因。