+ -
当前位置:首页 → 问答吧 → 关于C程序存储空间布局的问题

关于C程序存储空间布局的问题

时间:2011-07-20

来源:互联网

想问下初始化数据段和非初始化数据段的区别。
比如:
C/C++ code

int a;
int b = 10int main()
{
.......
}


上面的变量a和b,是处于哪个数据段。
然后,我下面的理解是否正确:
初始化数据段中的数据是否可以理解成是C程序中任何函数外的数据声明,该数据被显示的初始化过,如变量b;
非初始化数据段则是C程序中任何函数外的变量声明,该变量未被显示初始化,如变量a。

作者: qq2623102025   发布时间: 2011-07-20

楼主没有明白为什么有初始化数据段和未初始化数据段
未初始化段又称为BSS(Block Started by Symbol)段,用于存放未初始化的全局变量和静态变量,而初始化数据段存放初始化的全局变量和静态变量。
BSS段具体体现为一个占位符,不占用exe空间,其内容由操作系统初始化(清零),而data段需要占用,其内容由程序初始化。
BSS段之所以不占用exe文件空间是因为bss段都是一些没有初始化的变量,所以没有必要把这些变量的值给存储下来,只要记录下分配多大的空间就行了,到时候告诉loader需要分配多大的空间。
比如全局数据int a[100];这里没有初始化,所以没必要为他们分配100个int的空间,只需要告诉loader运行时候需要100个int的空间,这些空间的值都会被设置为缺省0
在Unix系统中,可以使用size a.out命令查看段大小。

作者: thefirstz   发布时间: 2011-07-20

热门下载

更多