关于C程序存储空间布局的问题
时间:2011-07-20
来源:互联网
想问下初始化数据段和非初始化数据段的区别。
比如:
C/C++ code
上面的变量a和b,是处于哪个数据段。
然后,我下面的理解是否正确:
初始化数据段中的数据是否可以理解成是C程序中任何函数外的数据声明,该数据被显示的初始化过,如变量b;
非初始化数据段则是C程序中任何函数外的变量声明,该变量未被显示初始化,如变量a。
比如:
C/C++ code
int a; int b = 10; int 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命令查看段大小。
未初始化段又称为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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28