关于代码链接时bss段的一点理解

本文介绍了BSS段的基本概念及其在程序中的作用。重点讲解了BSS段如何存储未初始化的全局变量,并通过实例展示了链接器如何确定BSS段的大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

突然要为bss段写点东西 ,虽然也就那么一两句话  ,但是之前我确实是一直不是怎么明白 , 其实是因为我在写bootloader的时候在清零bss段时出现了问题 ,具体什么问题。其实也没什么的。

 

1、bss段是用来存放未被初始化的全局变量 ,这个相信大家都是知道的。我也一直都看到bss段就是用来放未被初始化的全局变量 这几个字段。 但是也就知道而已。具体还没自己特意去观察过。其实链接器在链接的过程中会从编译好了的文件得知代码中到底使用了多少未被初始化的全局变量,或者初始化为0的全局变量(即使以后有些会被赋值),然后根据这几个全局变量的大小来决定bss段大小

如下,我定义了7个未初始化的全局变量:

int i;
int b;
int c;
int d;
int e;
int f;
int w;

        然后汇编出来如下,第一段的33f80740是bss段的起始地址 , 第二段的33f8075c是bss段的结束地址 ,由33f8075c - 33f80740 =  1C,也就是28个字节,刚好对应了上面7个32位整数。这里需要主要在清零bss段的时候,一定要注意如果没有未初始化或者初始化为0的全局变量的时候,bss是为0的。

33f800fc:       33f80740        mvnscc  r0, #16777216   ; 0x1000000
33f80100:       33f8075c        mvnscc  r0, #24117248   ; 0x1700000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值