c++ -常量和优化

C++ - constant and optimization

本文关键字:优化 常量 c++      更新时间:2023-10-16

我正在优化应用程序中的一些热点,并使用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相比做了什么,我无法访问反汇编清单。

使用-S标志调用gcc并查看程序集:

s

在编译完成后停止;不要组装。输出为指定的每个非汇编程序输入文件的汇编程序代码文件的形式。

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

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