当前位置: 首页 > news >正文

清除BSS段(ZI段)

1、C语言中的BSS段

(1)程序里的全局变量,如果它的初始值为0,或者没有设置初始值,这些变量被放在BSS段里,也叫ZI段。

char g_Char = 'A';
const char g_Char2 = 'B';
int g_A = 0;  // 放在BSS段
int g_B;      // 放在BSS段

(2)BSS段并不会放入bin文件中,否则也太浪费空间了。 在使用BSS段里的变量之前,把BSS段所占据的内存清零就可以了。

(3)注意:对于keil来说,一个本该放到BSS段的变量,如果它所占据的空间小于等于8字节自己,keil仍然会把它放在data段里。只有当它所占据的空间大于8字节时,才会放到BSS段。

int g_A[3] = {0, 0};   // 放在BSS段
char g_B[9];           // 放在BSS段int g_A[2] = {0, 0};   // 放在data段
char g_B[8];           // 放在data段

2、清除BSS段

2.1、BSS段在哪?多大?

(1)在散列文件中,BSS段(ZI段)在可执行域RW_IRAM1中描述,.ANY (+RW +ZI):

  • RW::可读可写的数据段
  • ZI:BSS段 
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************LR_IROM1 0x08000000 0x00100000  {    ; load region size_regionER_IROM1 0x08000000 0x00100000  {  ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00030000  {  ; RW data.ANY (+RW +ZI)}
}

(2)BSS段(ZI段)的链接地址(基地址)、长度,使用下面的符号获得:

2.2、怎么清除BSS段

2.2.1、汇编码

IMPORT |Image$$RW_IRAM1$$ZI$$Base|
IMPORT |Image$$RW_IRAM1$$ZI$$Length|
IMPORT memsetLDR R0, = |Image$$RW_IRAM1$$ZI$$Base|       ; DEST
LDR R1, = |Image$$RW_IRAM1$$ZI$$Length|     ; Length
BL memset

2.2.2、C语言

(1)方法1 声明为外部变量,使用时需要使用取址符:

extern int Image$$RW_IRAM1$$ZI$$Base;
extern int Image$$RW_IRAM1$$ZI$$Length;memset(&Image$$RW_IRAM1$$ZI$$Base, 0, &Image$$RW_IRAM1$$ZI$$Length);

(2)声明为外部数组,使用时不需要使用取址符:

extern char Image$$RW_IRAM1$$ZI$$Base[];
extern int Image$$RW_IRAM1$$ZI$$Length[];memset(Image$$RW_IRAM1$$ZI$$Base[], 0, Image$$RW_IRAM1$$ZI$$Length);

3、map文件

(1)在Listings文件下能找到map文件

(2)通过map文件查看变量所属的段

  • g_val_a在.data段
g_val_a                                  0x20000004   Data           4  main.o(.data)
  • g_val_b在.bss段
g_val_b                                  0x2000000c   Data          40  main.o(.bss)

http://www.dtcms.com/a/573247.html

相关文章:

  • 数据库安全配置指导
  • 江苏南京建设局官方网站wordpress开发门户网站
  • 科学休息,我用AI写了个vscode养鱼插件:DevFish发布
  • Spring Boot 项目 GitLab CI/CD 自动构建并推送到 Harbor 教程
  • 彻底理解传统卷积,深度可分离卷积
  • 使用VSCode进行SSH远程连接时无法与xxx建立连接
  • 宁波建设工程报名网站陕西省住房与建设厅网站
  • Rust 练习册 6:生命周期与闭包
  • 公司网站开发的流程高端企业网站公司
  • 第二届中欧科学家论坛暨第七届人工智能与先进制造国际会议(AIAM 2025)在德国海德堡成功举办
  • 微硕WSF3085 MOSFET,汽车电动尾门升降强效驱动
  • 5 Prompt Engineering 高阶技巧:构建智能对话系统的核心技术
  • 汽车系统可靠性与技术融合:智能动力总成及机电一体化诊断
  • 网站建设对企业的重要性线上营销的优势和劣势
  • JavaScript 正则表达式全方位解析:从基础到实战
  • 工业相机成像核心参数解析,帧率与曝光时间的权衡关系
  • Kodiak Perps:Berachain 原生永续合约平台上线
  • 分布式版本控制系统Git的安装和使用
  • 用.echarts文件快速实现日历饼图
  • 影刀RPA一键生成竞品分析!AI智能监控,效率提升100倍[特殊字符]
  • 从卡顿到秒查:Java 项目引入 Elasticsearch 实现亿级地址数据的复杂查询实战
  • 国外可以做推广的网站有哪些广州品牌形象设计
  • 【MySQL】SQL语法详细总结
  • 宿迁华夏建设集团网站下列什么软件不能用于设计网页
  • vue笔记(第一天)
  • cursor和传统idea的区别是什么?
  • SSM--MyBatis框架SQL映射文件获取一对一或者一对多关系值
  • 网站开发实验报告总结阿里云是不是做网站的
  • 1000元级投影选哪款?大眼橙C3D实测体验闭眼入
  • 第一章 函数与极限 2.数列的极限