关于RO、RW、ZI的说明
2016-05-09 17:02
459 查看
参考文章:
ARM中RO、RW和ZI DATA说明
http://mcuos.com/thread-2843-1-1.html
STM32后生成编译文件大小探索
http://www.cnblogs.com/51mcu/p/3940376.html
hex、bin、elf、axf文件区别
http://wenku.baidu.com/link?url=jnO4kGRmKoGA8SGl6wN9nZboEAPUqnZGs0_XYk743E47wCTF5a7CRjbpRaJaeG92Voe92dqWOxYKsRRRP3PC4wYMZA65udxGU25EBcR3vmW
ARM程序的组成,是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
RO是程序中的指令和常量【readonly】
RW是程序中的已初始化变量【read/write】
ZI是程序中的未初始化的变量【zero】
ARM映像文件的组成,是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
bin文件大小 = RO + RW + CODE
注意:bin文件仅包含纯粹的二进制数据
hex文件除了数据本身,还包含地址信息,因此hex文件稍大
axf文件包含调试信息。
RO中的指令包含如下功能:
1、将RW从ROM中搬到RAM,因为RW是变量,不能存在ROM中
2、将ZI所在的RAM区域全部清零,因为ZI区域并不再image中,所以需要程序根据编译器给出的ZI地址以及大小将对应的RAM区域清零,ZI中也是变量,不能存在ROM中
Prog1和Prog2的RO相差一个字节。
Prog3和Prog4的RW相差一个字节
Prog3和Prog4的ZI相差一个字节。
总结:
1、指令以及常量被编译后是RO类型数据
2、未初始化为0的变量编译后是ZI类型数据
3、已被初始化为非0值的变量编译后是RW类型数据
ARM中RO、RW和ZI DATA说明
http://mcuos.com/thread-2843-1-1.html
STM32后生成编译文件大小探索
http://www.cnblogs.com/51mcu/p/3940376.html
hex、bin、elf、axf文件区别
http://wenku.baidu.com/link?url=jnO4kGRmKoGA8SGl6wN9nZboEAPUqnZGs0_XYk743E47wCTF5a7CRjbpRaJaeG92Voe92dqWOxYKsRRRP3PC4wYMZA65udxGU25EBcR3vmW
ARM程序的组成,是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
RO是程序中的指令和常量【readonly】
RW是程序中的已初始化变量【read/write】
ZI是程序中的未初始化的变量【zero】
ARM映像文件的组成,是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
Image文件包含了RO和RW数据。之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
bin文件大小 = RO + RW + CODE
注意:bin文件仅包含纯粹的二进制数据
hex文件除了数据本身,还包含地址信息,因此hex文件稍大
axf文件包含调试信息。
RO中的指令包含如下功能:
1、将RW从ROM中搬到RAM,因为RW是变量,不能存在ROM中
2、将ZI所在的RAM区域全部清零,因为ZI区域并不再image中,所以需要程序根据编译器给出的ZI地址以及大小将对应的RAM区域清零,ZI中也是变量,不能存在ROM中
<span style="white-space:pre"> </span> Prog1: #include <stdio.h> void main(void) { ; } Prog2: #include <stdio.h> const char a = 5; void main(void) { ; } Prog1编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog2编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 61 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1009 ( 0.99kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB) ================================================================================
Prog1和Prog2的RO相差一个字节。
<span style="white-space:pre"> </span> Prog3: #include <stdio.h> void main(void) { ; } Prog4: #include <stdio.h> char a = 5; void main(void) { ; } Prog3编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog4编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 1 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 97 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB) ================================================================================
Prog3和Prog4的RW相差一个字节
<span style="white-space:pre"> </span> Prog3: #include <stdio.h> void main(void) { ; } Prog4: #include <stdio.h> char a; void main(void) { ; } Prog3编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 96 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 96 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================ Prog4编译出来后的信息如下: ================================================================================ Code RO Data RW Data ZI Data Debug 948 60 0 97 0 Grand Totals ================================================================================ Total RO Size(Code + RO Data) 1008 ( 0.98kB) Total RW Size(RW Data + ZI Data) 97 ( 0.09kB) Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB) ================================================================================
Prog3和Prog4的ZI相差一个字节。
总结:
1、指令以及常量被编译后是RO类型数据
2、未初始化为0的变量编译后是ZI类型数据
3、已被初始化为非0值的变量编译后是RW类型数据
相关文章推荐
- ClouderaManager修改集群的IP
- java基本数据类型、对应的封装类以及字符串之间的相互转换
- 立即执行函数: (function(){...})() 与 (function(){...}())
- Java Singletom 单例模式 常用实现方式
- Spring官网
- 187. Repeated DNA Sequences
- javascript之数组操作
- Google C++ Style Guide----英文版
- 网络编程知识(2)--Socket理解
- 二分法插入排序代码
- QT中常见的问题总结系列
- 里面的div怎么撑开外面的div让高度自适应
- 密码学扫盲:加密、认证、公钥、私钥
- FFMPEG视音频编解码零基础学习方法
- android - 如何在webview中调起拨号
- python - __str__ 和 __repr__
- 不同的fragment切换不同的actionbar.
- ENVI图像处理(一)Landsat-8OLI叶绿素反演
- leetcode 344. Reverse String 题解
- POJ-3436 ACM Computer Factory (最大流[Ford-Fulkerson])