欢迎来到天天文库
浏览记录
ID:50668115
大小:82.01 KB
页数:10页
时间:2020-03-07
《bss段代码段及数据段的区别.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一个程序本质上都是由bss段、data段、text段三个组成的。这样的概念,不知道最初来源于哪里的规定,但在当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。在采用段式内存管理的架构中(比如intel的80x86系统),bss段(BlockStartedbySymbolsegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.
2、data段中,未初始化的全局变量保存在.bss段中。在《Programminggroundup》里对.bss的解释为:Thereisanothersectioncalledthe.bss.Thissectionislikethedatasection,exceptthatitdoesn’ttakeupspaceintheexecutable.text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。【例一】用cl编译两个小程序如下:程序1:intar
3、[30000];voidmain(){......}程序2:intar[300000]={1,2,3,4,5,6};voidmain(){......}发现程序2编译之后所得的.exe文件比程序1的要大得多。当下甚为不解,于是手工编译了一下,并使用了/FAs编译选项来查看了一下其各自的.asm,发现在程序1.asm中ar的定义如下:_BSSSEGMENT?ar@@3PAHADD0493e0HDUP(?);ar_BSSENDS而在程序2.asm中,ar被定义为:_DATASEGMENT?ar@@3PAHADD01H;arDD02HDD03HORG$+1199988_DATAENDS区别很
4、明显,一个位于.bss段,而另一个位于.data段,两者的区别在于:全局的未初始化变量存在于.bss段中,具体体现为一个占位符;全局的已初始化变量存于.data段中;而函数内的自动变量都在栈上分配空间。.bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);而.data却需要占用,其内容由程序初始化,因此造成了上述情况。【例二】编译如下程序(test.cpp):#include#defineLEN1002000intinbss[LEN];floatfA;intindata[LEN]={1,2,3,4,5,6,7,8,9};doubledbB=100.0;c
5、onstintcst=100;intmain(void){intrun[100]={1,2,3,4,5,6,7,8,9};for(inti=0;i6、'DATA'_DATAENDSCONSTSEGMENTDWORDUSE32PUBLIC'CONST'CONSTENDS_BSSSEGMENTDWORDUSE32PUBLIC'BSS'_BSSENDS_TLSSEGMENTDWORDUSE32PUBLIC'TLS'_TLSENDSFLATGROUP_DATA,CONST,_BSSASSUMECS:FLAT,DS:FLAT,SS:FLATendifPUBLIC?inbss@@3PAHA;inbssPUBLIC?fA@@3MA;fAPUBLIC?indata@@3PAHA;indataPUBLIC?dbB@@3NA;dbB_BSSSEGMEN7、T?inbss@@3PAHADD0f4a10HDUP(?);inbss?fA@@3MADD01HDUP(?);fA_BSSENDS_DATASEGMENT?indata@@3PAHADD01H;indataDD02HDD03HDD04HDD05HDD06HDD07HDD08HDD09HORG$+4007964?dbB@@3NADQ04059000000000000r;100;dbB_DATA
6、'DATA'_DATAENDSCONSTSEGMENTDWORDUSE32PUBLIC'CONST'CONSTENDS_BSSSEGMENTDWORDUSE32PUBLIC'BSS'_BSSENDS_TLSSEGMENTDWORDUSE32PUBLIC'TLS'_TLSENDSFLATGROUP_DATA,CONST,_BSSASSUMECS:FLAT,DS:FLAT,SS:FLATendifPUBLIC?inbss@@3PAHA;inbssPUBLIC?fA@@3MA;fAPUBLIC?indata@@3PAHA;indataPUBLIC?dbB@@3NA;dbB_BSSSEGMEN
7、T?inbss@@3PAHADD0f4a10HDUP(?);inbss?fA@@3MADD01HDUP(?);fA_BSSENDS_DATASEGMENT?indata@@3PAHADD01H;indataDD02HDD03HDD04HDD05HDD06HDD07HDD08HDD09HORG$+4007964?dbB@@3NADQ04059000000000000r;100;dbB_DATA
此文档下载收益归作者所有