Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)
来源:互联网 发布:手机脚本软件 编辑:程序博客网 时间:2024/04/30 00:50
转自:http://blog.csdn.net/yuleicqut/article/details/50933441
最近开始留意MCU 的存储分配问题,所以我产生了一下疑问。同时,也有很多网友都有这个疑问。大家的观点答题相同,但又不尽详细。
参考文章:
http://anlx27.iteye.com/blog/1575848
http://www.mamicode.com/info-detail-1043059.html
http://limountain.blog.163.com/blog/static/478044492012311956956/
http://wenku.baidu.com/link?url=XLeK2pknOFaktA1vc9ojERVKUagsLX7A6h2R06ZNcwF7si-DfNHx8Y7goxycWRrfzTOjaW93lNFErTl3EjTQ8gEo0UAloEFWu0Slhhq4YsC
如,我用Keil/MDK 编译完工程,得到:
Program Size: Code=25648 RO-data=400 RW-data=800 ZI-data=8752
生成.map 文件copy过来的一段:
(生成的map文件位于list文件夹下 (KEIL))
==============================================================================
Code (inc. data) RO Data RW Data ZI Data Debug
25648 2554 400 800 8752 441136 Grand Totals
25648 2554 400 324 8752 441136 ELF Image Totals (compressed)
25648 2554 400 324 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 26048 ( 25.44kB)
Total RW Size (RW Data + ZI Data) 9552 ( 9.33kB)
Total ROM Size (Code + RO Data + RW Data) 26372 ( 25.75kB)
==============================================================================
网上有很多种解释,但是感觉都不够权威,最后我在Keil的帮助文档找到官方的解释:
如下面截图所示,
(1) Code(inc.Data) : 包含两部分,即代码和数据
- code,即程序代码部分
- inline data. For example, literal pools(文字常量池), and short strings(短字符串)等. 这个一般被忽略,请大家注意!!!
(2) RO Data: read-only data,只读的数据
Shows how many bytes are occupied by read-only data. This is in addition to the inline data included in theCode (inc. data)
column. 除inline data 之外的所有只读数据。(3) RW Data: read write data,可读写的数据
Shows how many bytes are occupied by read-write data.
(4) ZI Data: zero initialized data,零初始化的可读写变量Shows how many bytes are occupied by zero-initialized data.
keil编译器默认是把你没有初始化的变量都赋值一个0。初始化为零,或者未初始化的变量,都存储于这个区域。
存储Size:
RO size: Code + RO_data
RW size: RW_data + ZI_data
ROM (minimum)size = Code + RO_data + RW_data (即烧/下载程序到FLASH/ROM时,所占用的最小空间)
Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
RAM size: RW Data + ZI Data (即程序运行的时,RAM使用的空间)
一个ARM程序包含3部分:RO段,RW段和ZI段
RO是程序中的指令和常量
RW是程序中的已初始化变量
ZI是程序中的零初始化的变量
由以上3点说明可以理解为:
RO就是readonly,
RW就是read/write,
ZI就是zero
- Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)
- Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)
- Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)
- Keil/MDK :Program size: Code, RO-data , RW-data, ZI-data 解释
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil中 Program Size: Code RO-data RW-data ZI-data 所代表的意思
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?
- Android系统编程思想篇:建造者模式
- .NET 中的委托
- PAT
- iOS UDID UUID 广告标识符的区别
- Android 技术:支付宝支付接入详细指南
- Keil/MDK 小知识点:Program size: Code, RO-data , RW-data, ZI-data 解释(什么意思)
- Linux 之 最常用的20条命令
- LintCode | 66. 二叉树的前序遍历
- Spring AOP xml配置方法
- android中文件加密和解密的实现
- jquery单选按钮循环赋值及获取选中的值
- java关于switch-case的练习题
- COMET 诞生(转载)
- 学习笔记——Kaggle_Digit Recognizer (Random Forest算法 Python实现)