bss段代码段及数据段的区别
10页1、 一个程序本质上都是由 bss段、data段、text段三个组成的。这样的概念,不知道最初来源于哪里的规定,但 在当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。 比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。 在Programming ground up里对.bss的解释为:There is another section called the .bss. This section is like the data section, except that it doesnt take up space in the executab
2、le.text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。【例一】用cl编译两个小程序如下:程序1:int ar30000;void main().程序2:int ar300000 = 1, 2, 3, 4, 5, 6 ;void main(). 发现程序2编译之后所得的.exe文件比程序1的要大得多。当下甚为不解,于是手工编译了一下,并使用了/FAs编译选项来查看了一下其各自的.asm,发现在程序1.asm中ar的定义如下:_BSS SEGMENT?ar3PAHA DD 0493e0H DUP (?) ; ar_BSS ENDS而在程序2.asm中,ar被定义为:_DATA SEGMENT?ar3PAHA DD 01H ; arDD 02HDD 03HORG $+1199988_DATA ENDS区别很明显,一个位于.bss段,而另一个位于.data段,两者的区别在于:全局的未初始化变量存在于.bss段中,具体体现为一个占位符;全局的已初始化变量存于.data段中;而函数内的自动变量都在栈上
3、分配空间。.bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);而.data却需要占用,其内容由程序初始化,因此造成了上述情况。【例二】编译如下程序(test.cpp):#include #define LEN 1002000int inbssLEN;float fA;int indataLEN=1,2,3,4,5,6,7,8,9;double dbB = 100.0;const int cst = 100;int main(void)int run100 = 1,2,3,4,5,6,7,8,9;for(int i=0; iLEN; +i)printf(%d , inbssi);return 0;命令:cl /FA test.cpp 回车 (/FA:产生汇编代码)产生的汇编代码(test.asm):TITLE test.cpp.386Pinclude listing.incif Version gt 510.model FLATelse_TEXT SEGMENT PARA USE32 PUBLIC CODE_TEXT ENDS_DATA SEGMENT DWORD USE
4、32 PUBLIC DATA_DATA ENDSCONST SEGMENT DWORD USE32 PUBLIC CONSTCONST ENDS_BSS SEGMENT DWORD USE32 PUBLIC BSS_BSS ENDS_TLS SEGMENT DWORD USE32 PUBLIC TLS_TLS ENDSFLAT GROUP _DATA, CONST, _BSSASSUME CS: FLAT, DS: FLAT, SS: FLATendifPUBLIC ?inbss3PAHA ; inbssPUBLIC ?fA3MA ; fAPUBLIC ?indata3PAHA ; indataPUBLIC ?dbB3NA ; dbB_BSS SEGMENT?inbss3PAHA DD 0f4a10H DUP (?) ; inbss?fA3MA DD 01H DUP (?) ; fA_BSS ENDS_DATA SEGMENT?indata3PAHA DD 01H ; indataDD 02HDD 03HDD 04HDD 05HDD 06HDD 07HDD 08HDD 09HORG $
《bss段代码段及数据段的区别》由会员枫**分享,可在线阅读,更多相关《bss段代码段及数据段的区别》请在金锄头文库上搜索。
八年级数学教学设计:正方形7
四六级英语听力25必备词汇
南开大学22春《生产运营管理》补考试题库答案参考28
2023年福建省厦门市思明区筼筜街道屿后社区工作人员考试模拟题及答案
餐厅服务员国家职业标准
物业管理公司节约用电规定
2007年春06级外语听力课表汇总
石化施工安全规范
定州市智慧社区项目创业计划书
有效支持主产区保证粮食安全
汽车维修高级技能岗位分析与设计
2023年度工作总结优秀结尾(3篇).doc
春节促销方案(雅客V9)-成功案例
南京家庭储能产品项目招商引资方案(模板范本)
数字存储示波器的原理及使用
有关同学聚会倡议书三篇
2022年高一下学期期中教学质量调查语文试题含答案
商标恶意注册的法律规制(共3页)
中秋节英文作文400字
小学四年级语文教学随笔集锦小学四年级下学期班主任工作计划
2023-01-05 19页
2022-11-30 2页
2023-10-09 13页
2022-09-18 10页
2022-11-11 4页
2023-03-28 38页
2023-04-23 3页
2023-04-08 7页
2023-08-05 12页
2023-08-26 3页