1、BSS段的作用
初始化的全局变量:数据段
局部变量: 栈
malloc:堆
未初始化的全局变量:bss段
bss.c
2、未初始化的变量,需要全部清零
阅读(30) | 评论(0) | 转发(0) |
<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>
初始化的全局变量:数据段
局部变量: 栈
malloc:堆
未初始化的全局变量:bss段
bss.c
- #include <stdio.h>
-
- int year;
-
- int main()
- {
- year = 2014;
- return year;
- }
[root@localhost lesson11_bss]# arm-linux-gcc -c bss.c -o bss
[root@localhost lesson11_bss]# arm-linux-readelf -a bss >dump
- 80: 00008410 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
- 81: 00010528 0 OBJECT GLOBAL HIDDEN 22 __dso_handle
- 82: 00010530 4 OBJECT GLOBAL DEFAULT 23 year 10530是year的位置
- 83: 00010534 0 NOTYPE GLOBAL DEFAULT ABS __end__
- 84: 00008384 116 FUNC GLOBAL DEFAULT 12 __libc_csu_init
- 85: 00010534 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__ 结尾是10534
- 86: 0001052c 0 NOTYPE GLOBAL DEFAULT ABS __bss_start 起始是1052c,所以year在bss段中
- 87: 00010534 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
2、未初始化的变量,需要全部清零
- clean_bss:
- ldr r0, =bss_start bss_start是起始地址,在gboot.lds中获得的
- ldr r1, =bss_end bss_end是结束地址,在gboot.lds中获得的
- cmp r0,r1 比较r0,和r1
- moveq pc,lr 如果相同就跳转回bl clean_bss
-
- clean_loop:
- mov r2, #0 设置r2为0
- str r2, [r0], #4 初始化r0指向的内容,并将r0往下移动一格
- cmp r0,r1 比较r0,r1
- bne clean_loop 如果不相同就循环clean_loop
- mov pc,lr 跳转回bl clean_bss
给主人留下些什么吧!~~
评论热议