c++ - 常量操作数与任何算术运算符的顺序是否会影响优化?

标签 c++ assembly optimization c++17 compiler-optimization

假设我们定义了 constconstexpr 并且我们做简单的算术运算符,多次,变量和函数调用不会表达或返回常量.

    #define NU = 3; //Macro or
    const int NU = 3 // general declaration or constexpr
    auto NU = []()constexpr -> int { return 3;}
    int result = 0;

   #Approach one -> const NU on left side of the operator right side could be function call or a function parameter
    for(int i = 0; i< SOME_MAX; ++i) result = NU * foo(); // function call or
    for(int i = 0; i< SOME_MAX; ++i) result = NU * var; // variable

   #Approach two -> const NU on Right side of the operator Left side could be function call or a function parameter
    for(int i = 0; i< SOME_MAX; ++i) result = foo() * NU ;// function call or
    for(int i = 0; i< SOME_MAX; ++i) result = var * NU; // variable

哪种方法会生成优化的汇编 -> 机器代码?

相对于算术运算符,常量操作数位于 LHS 还是 RHS 会影响优化性能

注意 - 我在这里用它来描绘我的想法,性能影响或效率低下可以忽略不计,但是,假设使用一组常量进行复杂的数学运算。

谢谢。

最佳答案

应该是一样的。 大多数现代编译器将在编译时评估和传播常量。该理论称为Constant folding或持续传播。

编辑:就哪一方而言,应该没有什么不同。虽然,我认为在定理证明器中,比如 coq,证明 RHS 优化比证明 LHS 优化更困难(或者相反……我忘了。)。

关于c++ - 常量操作数与任何算术运算符的顺序是否会影响优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56765758/

相关文章:

assembly - 不同的 68k 模拟器有不同的 TRAP 任务吗?

c++ - 使用 find() 在 vector 中查找元素

c++ - 类和结构之间的基本功能区别是什么?

assembly - 汇编语言有多少种数据类型?

events - 事件监听器的实现——汇编与高级语言

C# LINQ 优化

PowerShell 代码格式

javascript - 如何优化编辑距离来检查距离为 1?

c++ - ATL 和来自 scrrun.dll 的类型

c++ - 是否允许递归初始化数组?