c - "const"有成本吗?

标签 c performance optimization constants

编译器有时会利用某些“变量”是优化常量这一事实,因此在可能的情况下使用“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)&param);
    printf("Global const: \t\t0x%08x\n", (int)&g);
    printf("Global non-const: \t0x%08x\n", (int)&not_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/

相关文章:

c++ - 为什么 std::vector 可能比原始动态分配的数组更快?

c - 是否可以在 C 中优化并更快地将数组乘以数字?

html - CSS媒体查询: one file vs.分离文件及对加载速度的影响

c - 在 Linux 平台上使用 C 以编程方式访问剪贴板数据

指针和整数之间的比较,我该如何解决?它甚至不运行

r - 在 R 中查找感染链的方法比 "while"循环更快

sql - Hive Query,有什么好的方法可以优化这些并集?

c - 在 C 的程序集中使用标签

c - C 最流行的通用集合数据结构库是什么?

php - 在 PHP 中仅加载特定函数的最佳方法