全局变量和静态变量的初始值为0,局部变量和自动变量的初始值是随机分配的。
你通过在栈上移动栈指针来定义局部变量,这实际上为程序提供了内存空间来绑定局部变量名。由于该内存空间位于堆栈上,并且由于堆栈内存会被重复使用,因此使用堆栈实现的局部变量的值为0,除非在定义它们时显式初始化它们。
全局变量是在链接时分配空间的,当程序运行时,操作系统的加载器负责为链接器分配全局变量的虚拟内存空间,并映射到初始化的页面。初始化为0,所以是0。全局和静态默认初始化是通过加载机制实现的。此外,未初始化的符号位于目标文件的bss部分,初始化的符号位于数据部分。
扩展信息
C语言变量存储类型、变量初始化
存储变量值的内存类型,包括通用内存、Runtime堆栈、硬件寄存器。默认存储类型与声明变量的位置有关。在代码块外部声明的变量(例如全局变量)存储在静态内存中而不是堆栈中,并且在程序执行期间始终存在。在代码块中声明的变量的默认存储类型为自动,称为自动变量。它存储在堆栈中,并在执行代码块时创建。
可以通过添加static关键字将自动变量更改为静态存储类型。它在程序执行期间始终存在,但其作用域不会改变,并且不能在代码块之外使用。。使用这个变量:
上一篇:vmos虚拟机安卓4.1
下一篇:vs中使用未初始化的内存