对uboot中BSS段的理解

一个程序里面包含有数据段、代码段、BSS段。而BSS段中存放的是一些未初始化的静态变量、全局变量,为了合理的使用内存,那么在最后编译出来的.bin文件中BSS段是不存在的。针对这个我自己给自己提出问题,以下答案依据个人理解,可能我描述有些问题,也可能我理解的不对,希望有朋友给我指出来,谢谢!
1、既然BSS段在最终编译出来的文件中是不存在的,那么,BSS还有什么作用呢?
答:因为在程序编译链接后,在指令代码中会指令访问未初始化全局、静态变量的地址,而在编译链接的时候,所以对应BSS段的地址还是会分配给这些变量,而BSS的作用就在于给出start_bss和end_bss这个地址。
2、BSS既然被砍掉了,那么怎么从程序中获取start_bss和end_bss这两个地址?
答:还是一样,程序在编译的时候,会指定两个地址的,所以即使没有了BSS,这两个地址在编译的时候就已经形成到机器代码中,换句话说,是先编译程序,然后砍BSS。看makefilearm-linux-ld -T leds.lds -o led.elf start.o led.o


          arm-linux-objcopy -O binary led.elf led.bin确实是这样。
3、为什么要用程序对BSS进行清零?
答:承上所述,BSS在编译出bin文件的后是被砍掉了的,那么,程序烧到存储器中后,对应的BSS那段内存中的内容就是未知的,所以我们必须的人为的把它清零。
  • 2
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

shop_ping

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值