编译器有时会利用某些“变量”是优化常量这一事实,因此在可能的情况下使用“const”关键字通常是个好主意,但是否存在折衷?
简而言之,是否存在使用“const”实际上会使代码变慢(甚至一点点)的情况?
最佳答案
const
关键字仅在编译时使用。代码编译后变量只是内存中的一个地址,没有任何特殊保护。
但是有一些区别 - global const
变量将被放置在 text
段中,而不是 data
(如果已初始化)或 bss (如果未初始化)。如果对 text
段进行不同处理,例如从 NOR 闪存(而不是 RAM)就地执行,则可能会有所不同。 Local const
变量与常规变量一起放在堆栈中,因此应该没有区别。
除此之外,正如 bestsss 所说,如果变量是常量,则某些编译时优化可能是不可能的。我真的想不出任何东西(尤其是在纯 C 中),但理论上是可能的。
编辑:
下面的代码演示了第二段中的观点:
const int g = 1;
int not_const = 1;
void foo(int param)
{
int i = 1;
const int j = 1;
printf("Variable: \t\t0x%08x\n", (int)&i);
printf("Const varialbe: \t0x%08x\n", (int)&j);
printf("Parameter: \t\t0x%08x\n", (int)¶m);
printf("Global const: \t\t0x%08x\n", (int)&g);
printf("Global non-const: \t0x%08x\n", (int)¬_const);
在 Visual Studio 2010 中,结果如下(注意 const 和 non-const 全局之间的巨大区别):
Variable: 0x002af444
Const varialbe: 0x002af440
Parameter: 0x002af43c
Global const: 0x00a02104
Global non-const: 0x00a03018
关于c - "const"有成本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6196755/