奇思妙想 · 2024年 3月 21日 0

为什么C语言全局或静态变量初始值是0?

103 次浏览

首先要理解,这些变量是如何被存储和加载的。全局或静态变量如果有明确初始化值(不为0),会被分配到.data区,对应目标文件或者可执行文件的.data区,它们是存储在文件中的。在操作系统加载程序时,会将它们拷贝到内存对应的区域。对于初始化为0或者没有写初始化的,根据编译器优化的方式,很可能放到BSS段,注意这个段并不会在文件.bss区分配空间,只是指定了总长度。因为,在操作系统加载的时候,会直接将一整块BSS在内存中初始化为全0. 是不是一点不浪费?