只要结果代码提供相同的可观察副作用,编译器就可以自由地优化代码.
因此,变量可以优化为仅存在于寄存器中,或者用立即值替换.在伪机器代码中:
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)
除非你i以一种需要地址的方式使用,否则编译器通常只会在编译时使用它,而在运行时,所有这些都将留给它10,而不是变量.
特别是,由于a const没有改变,所以除非你做一些事情,比如将它传递给一个通过引用获取参数的函数,否则不需要将它实际存储在内存中.