C代码:
int a;
printf("\n\t %d",a); // It'll print some garbage value;
Run Code Online (Sandbox Code Playgroud)
那么如何将这些垃圾值分配给C中窗帘后面的未初始化变量?
这是否意味着C首先将内存分配给变量'a',然后该内存位置的内容变为'a'的值?或者是其他东西?
这是否意味着C首先将内存分配给变量'a',然后该内存位置的内容变为'a'的值?或者是其他东西?
正确.值得一提的是,自动变量的"分配" int a实际上是不存在的,因为这些变量存储在堆栈或CPU寄存器中.对于存储在堆栈中的变量,在调用函数时执行"分配",并归结为一个指令,该指令将堆栈指针移动一个在编译时计算的固定偏移量(函数使用的所有局部变量的组合存储,四舍五入到正确对齐).
分配给CPU寄存器的变量的初始值是寄存器的先前内容.由于这种差异(寄存器与内存),有时会发生在编译时没有优化的情况下正常工作的程序在打开优化时编译.之前指向恰好为零初始化的位置的未初始化变量现在包含来自先前使用相同寄存器的值.