const int不占用空间?

8 c memory int

在此评论的答案的匿名枚举的使用,奥利奇查尔斯沃思说:

const int是不可变的,并且可能不会占用任何空间,具体取决于编译器选择做什么.

如果我宣布const int i = 10,10如果它"可能不占用任何空间" ,那该怎么存储?

假设a int是4个字节,我认为保留至少4个字节来存储10作为a const int.

Oli*_*rth 9

只要结果代码提供相同的可观察副作用,编译器就可以自由地优化代码.

因此,变量可以优化为仅存在于寄存器中,或者用立即值替换.在伪机器代码中:

SET 10, eax
ST eax, &i    # Initialise i

...

LD &i, eax    # Add i to ebx
ADD eax, ebx, ebx
Run Code Online (Sandbox Code Playgroud)

可能成为:

SET 10, eax
ADD eax, ebx, ebx
Run Code Online (Sandbox Code Playgroud)

甚至只是:

ADD 10, ebx, ebx
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 6

除非你i以一种需要地址的方式使用,否则编译器通常只会在编译时使用它,而在运行时,所有这些都将留给它10,而不是变量.

特别是,由于a const没有改变,所以除非你做一些事情,比如将它传递给一个通过引用获取参数的函数,否则不需要将它实际存储在内存中.