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那段内存中的内容就是未知的,所以我们必须的人为的把它清零。

转载https://www.xuebuyuan.com/754807.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值