C ++ - 常量和优化

时间:2011-10-13 13:17:29

标签: c++ optimization gcc assembly const

我正在优化应用程序中的一些热点,并使用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>的

非常感谢。

2 个答案:

答案 0 :(得分:4)

使用-S标记调用gcc,然后查看程序集:

  

<强> -S

     

在编译阶段之后停止;不要组装。对于指定的每个非汇编器输入文件,输出采用汇编程序代码文件的形式。

我会尝试将自己包含在答案中,但我没有方便的ARM编译器。

答案 1 :(得分:1)

一个区别当然是第一个版本static会耗尽一些内存,即使它的值会在表达式中内联。如果你想计算一个更复杂的表达式然后存储结果,这将是有意义的,但对于这个简单的常量,静态是不必要的。也就是说,编译器很可能会内联该值,因为这是一个非常简单的优化,没有理由不这样做。