【发布时间】:2014-08-10 11:50:38
【问题描述】:
通常在 C++ 中,您希望使用常量而不是使用 #define 定义常量,因为存在类型检查,这是一件好事。
#define MYCONST 10; // NO
const int MYCONST = 10; // OK.
这很好,但假设我想提高我的应用程序的性能;如果我仍然必须读取该常量,我可能会从 L1 到 L3 的任何缓存级别读取它(我希望是正确的),这会导致速度变慢。
将该常量定义为如下所示的简单内联函数会更好吗?
inline int MYCONST()
{
return 10;
}
当我应该期待一些改进时,我是否正确?
根据here 的整数,它似乎取决于编译器和我使用的类型。
【问题讨论】:
-
为什么不直接实施和衡量?您可能根本不会注意到差异,因为编译器太聪明了。顺便说一句,为宏保留 ALL_UPPERCASE。
-
有了所有这些,编译器很可能就如何从使用该常数的任何计算中获得最大性能做出正确的决定。
-
“从 L1 到 L3 的任何缓存级别读取它 [...]” - 当编译器优化时,这些常量被放入代码段(链接的答案将其解释为“烘焙”) .没有额外的阅读。
-
好的,我明白了 不涉及缓存..谢谢
标签: c++ performance macros inline