1. 什么是BSS段?
一个程序本质上都是由bss段、data段、text段三个组成的。
BSS段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。
2. BSS段的特点
bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0。如果把它们出现在程序下载文件中,会增加程序下载文件的大小。实际应用中,通常只需要把bss段的起始地址和结束地址保存起来,而不需要将程序下载文件中出现bss段(一堆0)将来真正运行程序的时候,再根据这两个数据进行bss段的初始化就行了。
程序1:
int ar[30000];
void main()
{
......
}
程序2:
int ar[300000]={1,2,3,4,5,6};
void main()
{
......
}
发现程序2编译之后所得的.exe文件比程序1的要大得多。
.bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);
.data却需要占用,其内容由程序初始化。因此造成了上述情况。
3. 代码中哪些部分属于BSS段?
用下面这段代码实例简单说明下哪些数据会被保存在BSS段
示例一:
static int a[10000]; // 未初始化的全局静态变量
int a = 0; // 初始化为0的全局变量
char b; // 未初始化的全局变量
int main()
{
//...
}
4. BSS段为什么一定要初始化为0?
如果系统上电前不对BSS段进行初始化,可能会导致在程序开始运行时一些全局变量加载时值并不是0值,进而导致系统异常。