BSS段为什么一定要初始化

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值,进而导致系统异常。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值