link脚本一般包含类似语句:
1
2
3
4
5
6
7
8
9
10
11
|
_bss_start = .;
__bss_start__ = .;
.bss :
{
*(.shbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
}
. = ALIGN (
4
);
_bss_end = . ;
__bss_end__ = . ;
|
启动过程的代码一般在汇编做:
1
2
3
4
5
6
7
8
9
|
@++++clear the BSS section++++
ldr r2,=__bss_start__
ldr r3,=__bss_end__
mov r12,#
0
bss_loop:
cmp r2,r3
stmltia r2!,{r12}
blt bss_loop
@----clear the BSS section----
|
所以不要在C代码中对未初始化的全局变量赋0,因为BSS段会被自动赋0.
本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/1295126,如需转载请自行联系原作者