f(int const) 比 f(int) 更适合编译器优化吗? [重复]

问题描述 投票:0回答:1

考虑以下两个函数:

void f(int n);

void f(int const n);

从编译器优化的角度来看,后者似乎比前者更好。

然而,从来电者的角度来看,

int const n
int n更多无用信息
更多精神负担

哪种做法更好?

c++ performance optimization constants compiler-optimization
1个回答
5
投票

TLDR:实际上,这样做的性能优势为零。 使用 const 是为了清晰和可读性,而不是性能。

由于函数参数上的

const
甚至不是函数签名的一部分, 无论您的 ABI 如何,这两个函数都将具有完全相同的调用约定。这意味着呼叫者的利益为零。

在函数本身内部,

const
对编译器也没有多大帮助。 任何有价值的编译器都可以自行判断您是否正在修改
n

可以构造病态的情况,其中

const
could 允许编译器假设某些事情。 例如,我们将
n
作为(非常量)指针传递给的嵌套函数调用不会修改它。 这可以允许编译器更好地进行存储->加载转发并避免溢出到堆栈。就目前情况而言,编译器似乎甚至没有利用这一点(https://godbolt.org/z/jGsKo56aG)。

© www.soinside.com 2019 - 2024. All rights reserved.