"const"有成本吗?

PhD*_*hDP 5 c optimization performance const

编译器有时会利用某些"变量"是优化常量的事实,所以在可能的情况下使用"const"关键字通常是一个好主意,但是有权衡吗?

简而言之,是否存在使用"const"实际上可能使代码变慢(甚至一点点)的情况?

Eli*_*ser 8

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)&param);
    printf("Global const: \t\t0x%08x\n", (int)&g);
    printf("Global non-const: \t0x%08x\n", (int)&not_const);
Run Code Online (Sandbox Code Playgroud)

}

在Visual Studio 2010中,结果如下(注意const和非const全局之间的巨大差异):

变量:0x002af444
Const varialbe:0x002af440
参数:0x002af43c
全局const:0x00a02104
全局非const:0x00a03018

  • 你的第二个参数实际上只是关于`const`全局(或静态全局)变量 - 还有一些要考虑的函数参数,OP可能也在考虑这些参数. (2认同)