1.56、未初始化的全局变量和初始化的全局变量放在哪里?

初始化的全局变量

初始化的全局变量(包括显式初始化为非零或零的变量)存放在**数据段(data segment)**中。数据段又细分为可读写的数据区(存放普通已初始化变量)和只读数据区(存放const修饰的全局常量)。数据段在程序加载时由操作系统从可执行文件加载到内存,且占用可执行文件的物理空间。

未初始化的全局变量

未初始化的全局变量(以及静态变量,或者显式初始化为0的全局/静态变量)存放在**BSS段(Block Started by Symbol)**中。BSS段只在逻辑上占用空间,程序启动时由操作系统自动清零,且不占用可执行文件的物理空间。BSS段同样属于静态内存分配,保证这些变量在程序运行前被初始化为0。

总结来说,二者均属于静态存储,区别在于是否有显式初始化:

变量类型 存储位置 特点
初始化的全局变量 数据段(data) 占用可执行文件空间,程序加载时初始化
未初始化的全局变量 BSS段 不占用可执行文件空间,程序启动时自动清零

这种内存划分不仅优化了可执行文件大小,也方便操作系统对程序的加载和初始化管理。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END