[英]C++ - constant and optimization
我正在优化应用程序中的一些热点,并使用gcc-arm
完成了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
相比gcc-arm
功能如何,并且我无法访问反汇编列表。
非常感谢你。
使用-S
标志调用gcc并查看程序集:
-S
在适当的编译阶段后停止; 不要组装。 对于每个指定的非汇编程序输入文件,输出采用汇编程序代码文件的形式。
我会尝试将自己包括在答案中,但是我没有ARM编译器。
唯一的区别是,带有static
的第一个版本将占用一些内存,即使该值将在表达式中内联。 如果您想一次计算一个更复杂的表达式然后存储结果,这将是有意义的,但是对于这个简单的常量,静态是不必要的。 就是说,编译器很可能内联该值,因为这是一个非常简单的优化,没有理由不这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.