清除BSS段的一般做法

简介:

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,如需转载请自行联系原作者


相关文章
|
4月前
|
存储 监控 安全
JVM内存问题之如何比较不同时间点的pmap输出以检查新增或变大的内存段
JVM内存问题之如何比较不同时间点的pmap输出以检查新增或变大的内存段
|
6月前
|
存储 Oracle 关系型数据库
Oracle的段:深入数据段与日志段的奥秘
【4月更文挑战第19天】Oracle数据库中的数据段和日志段是存储管理的核心。数据段存储表和索引的实际数据,随数据增长动态调整;日志段记录变更历史,保障数据完整性和恢复。两者协同工作,确保数据库稳定性和并发控制。了解和优化它们的配置能提升数据库性能和可靠性,为业务发展提供支持。
|
6月前
|
存储 C语言
start.S详解学习(5):清除 bss 段
start.S详解学习(5):清除 bss 段
152 0
|
存储 程序员 编译器
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
249 0
|
存储 程序员 Linux
再谈应用程序分段:代码段、数据段、bss以及堆和栈
再谈应用程序分段:代码段、数据段、bss以及堆和栈
731 0
|
存储 C语言
(指针内容)当你申请一个变量,在这期间内存会发生什么?
(指针内容)当你申请一个变量,在这期间内存会发生什么?
120 0
(指针内容)当你申请一个变量,在这期间内存会发生什么?
|
数据库连接 数据库 数据安全/隐私保护
对象变量或with块变量未设置————问题根源
对象变量或with块变量未设置————问题根源
1183 0
对象变量或with块变量未设置————问题根源
|
机器学习/深度学习 存储 Linux
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
|
存储 Oracle 关系型数据库
表空间、段、区、块
一、数据块(Block) 简介 数据块Block是Oracle存储数据信息的最小单位。注意,这里说的是Oracle环境下的最小单位。Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异。
1270 0