C语言未初始化全局静态变量存储问题:BSS段大小未增加
未初始化全局静态变量未增加BSS段的原因
- 核心原因是编译器的死代码消除优化:你代码里的
static int i全程没有被任何代码读写,编译器判定它是无用变量,编译时直接把它剔除了,根本没放进最终可执行文件,自然不会占用BSS段空间。 - 验证方法很简单:在
main里加一行对i的引用,比如i = 0;或者printf("%d", i);,重新编译后再看BSS段大小,就能看到变化了。
补充说明:BSS段确实用来存放未初始化的全局变量、静态全局变量和未初始化的局部静态变量,但只有当这些变量被编译器判定为“有用”时,才会被保留进可执行文件的BSS段里。
内容的提问来源于stack exchange,提问作者A coin has two sides
相关产品推荐
相关产品推荐

