变量存储情况分析表:
全局普通变量未初始化 | *COM* | 链接后为.bss (不使用-c) |
全局普通变量初始化为0 | .bss | |
全局普通变量初始化为其他 | .data | |
全局静态变量未初始化 | .bss | |
全局静态变量初始化为0 | .bass | |
全局静态变量未初始化为其他 | .data | |
全局常量初始化为0 | .rodata | |
全局常量初始化为其他 | .rodata | |
局部静态变量未初始化 | .bss | |
局部静态变量初始化为0 | .bss | |
局部静态变量初始化为其他 | data |
总结1: 全局常量存储位置为 .rodata (紫色标识)
总结2: 初始化为非零值的情况下:存储在data (蓝色标识)
总结3: 未初始化或者初始化为零:存储在.bss(绿色标识)
总结4:(在总结三的情况下)未初始化与初始化为零的区别及注意事项
注意1:未初始化变量使用-c 不进行链接时,会放在*COM*中。链接之后放入了.bss中
注意2: 全局未初始化变量和全局初始化为零的变量分别存在两个文件时,
前者 保存在common段(弱符号),后者保存在.bss段(强符号),那么在链接的过程中, cc会用强符号覆盖掉弱符号,并不会引起链接冲突错误。
可参考: 关于未初始化全局变量_KrossJin的专栏-CSDN博客_未初始化的全局变量
代码sample: