c++ -常量和优化
C++ - constant and optimization
我正在优化应用程序中的一些热点,并使用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
的第一个版本将使用一些内存,即使它的值将被内联到表达式中。如果您想计算一次更复杂的表达式,然后存储结果,那么这是有意义的,但是对于这个简单的常量来说,静态是不必要的。也就是说,编译器很可能会内联该值,因为这是一个非常简单的优化,没有理由不这样做。
相关文章:
- 为什么乘以常量有符号整数分数没有优化?
- 如何防止优化静态常量
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 常量右值引用是否允许对编译器进行额外优化?
- 优化开关(x),x是作为参数传递的常量数
- GCC可以优化具有编译时常量变量的类的方法吗
- C++.优化使用大量常量字符串的程序
- C/C++中使用常量优化的函数调用
- 如何通过常量优化数组乘法
- 当函数参数是常量引用临时或按值复制的临时时,为什么 MSVC 优化会破坏 SSE 代码
- 优化器是否会根据编译时常量推导出数学表达式
- 可变成员是否禁用不可变成员的常量优化
- 循环中的常量条件:编译器优化
- 常量指针C++和优化,它们更快吗
- 带有两个常量的C++:pow()优化
- 编译器是否会将这个表达式优化为一个临时常量,而不是每次迭代都解析它
- C++常量引用参数优化
- C/ c++编译器会对交换运算符(例如:+,*)重新排序以优化常量吗?
- c++ -常量和优化
- 在循环中有常量函数返回值的优化吗?