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

ARM中ZI-data段和RW-data段

ARM中ZI-data段和RW-data段

  • 1、只定义全局变量,不使用,不占用内存空间
  • 2、 定义并初始化全局变量为0 占用ZI-Data区域
  • 3、定义并初始化全局变量非0 占用RW-Data区域
  • 4、增加的是一个int8的数据为什么,size增加不是1
  • 5、定义的全局变量为0,但增加的是RW-Data段大小?


最近使用Keil写代码时,碰到了几个现象,现在汇总一下


初始情况:
Program Size: Code=51988 RO-data=5560 RW-data=592 ZI-data=3064
在这里插入图片描述

1、只定义全局变量,不使用,不占用内存空间

示例:pandas 是基于NumPy 的一种工,该工具是为了解决数据分析任务而创建的。

在下面情况下都是使用了全局变量的。


2、 定义并初始化全局变量为0 占用ZI-Data区域

Program Size: Code=52000 RO-data=5560 RW-data=592 ZI-data=3072
在这里插入图片描述
在map文件也可以看出占用ZI-Data区域
在这里插入图片描述

3、定义并初始化全局变量非0 占用RW-Data区域

Program Size: Code=52000 RO-data=5560 RW-data=596 ZI-data=3068
在这里插入图片描述
map文件也可以看出占用RW-Data区域
在这里插入图片描述

4、增加的是一个int8的数据为什么,size增加不是1

与数据对齐以及段对齐有关有关:ARM是32位的,同时定义段时会有对齐操作

对比两个map文件
在这里插入图片描述

RW-Data: 全局初始化非0的大于全局初始化为0的4字节,包括:变量本身,Pad(补齐)处的3(6-3)字节
ZI-Data: 全局初始化为0的大于全局初始化非0的4字节,包括:变量本身,Pad(补齐)处的3(13-10)字节

那么如何确定是由于对齐影响的呢:在全局变量初始化非0情况下,增加一个全局变量非0的变量
Program Size: Code=52004 RO-data=5560 RW-data=596 ZI-data=3068
在这里插入图片描述
其Map文件
在这里插入图片描述

总的RW-data不变,总的Pad减1,main的RWdada加1

5、定义的全局变量为0,但增加的是RW-Data段大小?

与–bss_threshold=num 编译选项有关
默认是当定义变量小于8字节时,编译器优化,变量位于RW-Data段,只有大于8字节数据变量才位于ZI-Data段

初始化大小:
Program Size: Code=51988 RO-data=5560 RW-data=760 ZI-data=2904
在这里插入图片描述

定义小于8字节数据大小:
Program Size: Code=52000 RO-data=5560 RW-data=764 ZI-data=2900
在这里插入图片描述

定义大于8字节数据大小:
Program Size: Code=52008 RO-data=5560 RW-data=760 ZI-data=3032
在这里插入图片描述

修改–bss_threshold=0 可以得到1-4中的结果

http://www.lryc.cn/news/488376.html

相关文章:

  • 关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现
  • linux常用命令(网络相关)
  • 【uni-app多端】修复stmopjs下plus-websocket无心跳的问题
  • VScode学习前端-01
  • Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段
  • 突破自动驾驶瓶颈!KoMA:多智能体与大模型的完美融合
  • YOLO入门教程(三)——训练自己YOLO11实例分割模型并预测【含教程源码+一键分类数据集 + 故障排查】
  • 【加入默语老师的私域】C#面试题
  • 称重传感器指示器行业全面且深入的分析
  • NAT网络地址转换——Easy IP
  • 【Visual Studio系列教程】如何在 VS 上编程?
  • Mybatis-Plus 多租户插件属性自动赋值
  • AWTK-WIDGET-WEB-VIEW 实现笔记 (4) - Ubuntu
  • Python入门(7)--高级函数特性详解
  • 【数据库原理】理解数据库,基础知识
  • VConsole——(H5调试工具)前端开发使用于手机端查看控制台和请求发送
  • 论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架
  • vmWare虚拟环境centos7安装Hadoop 伪分布式实践
  • 【C++入门(一)】半小时入门C++开发(深入理解new+List+范围for+可变参数)
  • Vue 3与TypeScript集成指南:构建类型安全的前端应用
  • MATLAB和Python发射光谱
  • IEEE(常用)参考文献引用格式详解 | LaTeX参考文献规范(IEEE Trans、Conf、Arxiv)| 期刊会议名缩写查询
  • 第二十周:机器学习
  • Elasticsearch面试内容整理-Elasticsearch 基础概念
  • 机器学习算法模型系列——Adam算法
  • Qt按钮类-->day09
  • 基于xr-frame实现微信小程序的手部、手势识别3D模型叠加和石头剪刀布游戏功能
  • 基于Kafka2.1解读Consumer原理
  • 深度学习:ResNet每一层的输出形状
  • 国内几大网络安全公司介绍 - 网络安全