尽可能高效地交换字节
Swap bytes as efficiently as possible?
目前我有这个函数来交换数据的字节以更改字节序。
template<typename Type, unsigned int Half = sizeof(Type)/2, unsigned int End = sizeof(Type)-1>
inline void swapBytes(Type& x)
{
char* c = reinterpret_cast<char*>(&x);
char tmp;
for (unsigned int i = 0; i < Half; ++i) {
tmp = c[i];
c[i] = c[End-i];
c[End-i] = tmp;
}
}
这个函数会被我的一些算法调用几百万次。因此,每一个可以避免的指令都是一件好事。
我的问题是:如何优化此功能?
首先,您需要检查您的硬件平台是否有字节交换指令。有些平台有这些说明,有些则没有。之后,您需要查找使用它们的库函数。检查文档或在调试器中停止并查看反汇编。你很有可能会找到一个。其他任何事情都不太可能比这更好。
最终在使用这些指令的汇编程序中编写自己的函数。
对于 2 字节类型,直表转换将起作用。这是 128 kb,对于我们今天的计算机来说并不多。对于 32 位类型,这几乎是矫枉过正,但在某些(罕见)情况下,可能仍然适用于大的 64 位盒子。
您还可以结合使用 asm 指令、表转换和优化循环。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- C++ int* 和 char* 字节顺序已交换
- 交换未定义数据类型中的字节顺序
- 用FWRITE创建图像后,将交换字节
- 使用重新解释强制转换时交换字节序
- 交换字节中的半字节
- 尽可能高效地交换字节
- 用高位字节(8-15)交换低位字节(0-7)
- C++32位字字节交换
- 字节交换方面的一般交换实现
- 交换 DWORD 中的字节
- 如何在C++从字节数组中提取字节时交换 64 位整数
- 交换浮点数组中的字节
- C++:如何交换wchar_t的字节顺序
- 交换QByteArray中的字节
- 与数组进行字节交换
- 拷贝期间的字节交换
- 字节翻转和字节交换的区别
- 在内存映射文件中交换字节的有效方式
- 如何交换字节