【发布时间】:2012-03-14 17:49:00
【问题描述】:
假设我们有 32 位整数、8 位字符、gcc 编译器和 Intel 架构:
提取整数变量的第三个八位字节的最快方法是什么(不使用汇编程序)?例如,将其存储到 char[] 某个特定位置的 char 中?
【问题讨论】:
-
别管“最快”;你知道怎么做吗?然后这样做,让编译器对其进行优化。
-
使用最明显的方式,让编译器转换成更高效的方式?例如。
(some_integer>>16)&0xff. -
为什么你认为你需要最快的方式来进行这样的操作?您在此操作中是否存在性能瓶颈?除了显而易见的事情之外,做其他事情还有什么意义吗?
-
似乎只有两种远程明智的方法:
(char) (i >> 16),正如 arc 所建议的那样,以及((char*)&i)[2]。 (后者也可以通过union完成。)我猜前者通常更快(没有指针运算,不需要i有内存位置),但为什么不尝试两种方式,看看哪个在您的程序中运行得更快? -
@DavidRodríguez-dribeas 联合技巧是形式上未定义的行为(尽管我从未听说过不能工作的编译器)。另一方面,它和指针转换都非常依赖于架构,并且在不同的机器上会有不同的语义。
标签: c++ optimization micro-optimization