PhD*_*hDP 5 c optimization performance const
编译器有时会利用某些"变量"是优化常量的事实,所以在可能的情况下使用"const"关键字通常是一个好主意,但是有权衡吗?
简而言之,是否存在使用"const"实际上可能使代码变慢(甚至一点点)的情况?
该const关键字仅在编译时使用.编译代码后,变量只是内存中的一个地址,没有任何特殊保护.
但是有一些区别 - 全局 const变量将放在text段中,而不是data(如果已初始化)或bss(如果未初始化).如果对text段的处理方式不同,例如从NOR闪存(而不是RAM)执行,则可能存在差异.局部 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);
Run Code Online (Sandbox Code Playgroud)
}
在Visual Studio 2010中,结果如下(注意const和非const全局之间的巨大差异):
变量:0x002af444
Const varialbe:0x002af440
参数:0x002af43c
全局const:0x00a02104
全局非const:0x00a03018