我正在优化应用程序中的一些热点,并使用gcc-arm
进行编译。
现在,以下语句是否有可能导致不同的汇编程序代码:
static const pixel_t roundedwhite = 4294572537U;
return (packed >= roundedwhite) ? purewhite : packed;
// OR
const pixel_t roundedwhite = 4294572537U;
return (packed >= roundedwhite) ? purewhite : packed;
// OR
return (packed >= 4294572537U) ? purewhite : packed;
我的ARM编译器是否有可能为第一种情况产生不需要的代码,或者是否应该优化它?
我认为它是相同的,但不幸的是,我不确定gcc-arm
与普通gcc
相比,我无法访问反汇编列表。< / em>的
非常感谢。
答案 0 :(得分:4)
使用-S
标记调用gcc,然后查看程序集:
<强> -S 强>
在编译阶段之后停止;不要组装。对于指定的每个非汇编器输入文件,输出采用汇编程序代码文件的形式。
我会尝试将自己包含在答案中,但我没有方便的ARM编译器。
答案 1 :(得分:1)
一个区别当然是第一个版本static
会耗尽一些内存,即使它的值会在表达式中内联。如果你想计算一个更复杂的表达式然后存储结果,这将是有意义的,但对于这个简单的常量,静态是不必要的。也就是说,编译器很可能会内联该值,因为这是一个非常简单的优化,没有理由不这样做。