xml*_*lmx 0 c++ optimization performance constants compiler-optimization
考虑以下两个函数:
void f(int n);
void f(int const n);
Run Code Online (Sandbox Code Playgroud)
从编译器优化的角度来看,后者似乎比前者更好。
然而,从调用者的角度来看,比 .int const n拥有更多的无用信息和更多的精神负担int n。
哪个是更好的做法?
TLDR:实际上,这样做的性能优势为零。使用 const 是为了清晰和可读性,而不是为了性能。
由于const函数参数甚至不是函数签名的一部分,因此无论您的 ABI 如何,这两个函数都将具有完全相同的调用约定。这意味着呼叫者的利益为零。
在函数本身内部,对const编译器也没有多大帮助。任何值得信赖的编译器都可以自行判断您是否正在修改n.
构建病态案例是可能的,其中const 可能允许编译器假设某些事情。例如,我们n作为(非常量)指针传递给的嵌套函数调用不会修改它。这可以让编译器更好地进行存储 -> 加载转发并避免溢出到堆栈。就目前情况而言,编译器似乎甚至没有利用这一点(https://godbolt.org/z/jGsKo56aG)。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |