【发布时间】:2010-12-24 19:21:43
【问题描述】:
我需要将一个短值从主机字节顺序转换为小端。如果目标是大端,我可以使用 htons() 函数,但可惜 - 它不是。
我想我能做到:
swap(htons(val))
但这可能会导致字节被交换两次,从而使结果正确,但会给我带来性能损失,这在我的情况下是不行的。
【问题讨论】:
-
不用担心性能损失。如果你做了多余的事情(交换一个 int 两次),编译器会检测到它并在优化阶段删除代码。
-
Nils 所说的,但更谨慎的方法是首先检查生成的代码在你能承受的优化级别上(如果你被调试卡住了,那么哦)。如果双重交换被优化掉,你的性能问题就会立即解决。
-
编译器真的能优化这个吗?我想如果 swap() 和 htons() 是宏或内联函数,它会,但否则呢?
-
视情况而定。有时编译器可以自动内联(或通过链接时代码生成间接内联),有时必须提示使用(强制)内联或使用跨模块编译......如果不先尝试就很难获得准确的建议。
标签: c++ c endianness