BSS初始化

1、BSS段的作用
初始化的全局变量:数据段
局部变量: 栈
malloc:堆
未初始化的全局变量:bss段

bss.c
  1. #include <stdio.h>

  2. int year;

  3. int main()
  4. {
  5.     year = 2014;
  6.     return year;
  7. }
[root@localhost lesson11_bss]# arm-linux-gcc -c bss.c -o bss
[root@localhost lesson11_bss]# arm-linux-readelf -a bss >dump

  1. 80: 00008410 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
  2. 81: 00010528 0 OBJECT GLOBAL HIDDEN 22 __dso_handle
  3. 82: 00010530 4 OBJECT GLOBAL DEFAULT 23 year                            10530是year的位置
  4. 83: 00010534 0 NOTYPE GLOBAL DEFAULT ABS __end__
  5. 84: 00008384 116 FUNC GLOBAL DEFAULT 12 __libc_csu_init
  6. 85: 00010534 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__                    结尾是10534
  7. 86: 0001052c 0 NOTYPE GLOBAL DEFAULT ABS __bss_start                    起始是1052c,所以year在bss段中
  8. 87: 00010534 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__

2、未初始化的变量,需要全部清零

  1. clean_bss:
  2.     ldr r0, =bss_start                     bss_start是起始地址,在gboot.lds中获得的
  3.     ldr r1, =bss_end                       bss_end是结束地址,在gboot.lds中获得的
  4.     cmp r0,r1                              比较r0,和r1
  5.     moveq pc,lr                            如果相同就跳转回bl clean_bss

  6. clean_loop:
  7.     mov r2, #0                             设置r2为0
  8.     str r2, [r0], #4                       初始化r0指向的内容,并将r0往下移动一格
  9.     cmp r0,r1                              比较r0,r1
  10.     bne clean_loop                         如果不相同就循环clean_loop
  11.     mov pc,lr                              跳转回bl clean_bss



<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(30) | 评论(0) | 转发(0) |
0

上一篇:栈初始化

下一篇:一跃进入C大门

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

习惯就好zz

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值