keil编译后code大小

来源:互联网 发布:伦纳德官方体测数据 编辑:程序博客网 时间:2024/05/29 04:42

keil编译后会有一行:Program Size:Code=xxxRO-data=xxxRW-data=xxx ZI-data=xxx

Code 代表执行的代码,程序中所有的函数都位于此处。

RO-data 代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。

RW-data 代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。

ZI-data 代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。ZI英语是zero initial,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。

2.如果你查看.map文件,如下例子:

==============================================================================

    Total RO  Size (Code + RO Data)                 2980 (   2.91kB)
    Total RW  Size (RW Data + ZI Data)               104 (   0.10kB)
    Total ROM Size (Code + RO Data + RW Data)       2988 (   2.92kB)

==============================================================================

Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可,包含进去反而浪费存储空间。

实际上,ROM中的指令至少应该有这样的功能:
       1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
       2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中。
       在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摆钟图片 大摆钟 摆钟原理 商场摆闸 超市摆闸 摆闸门禁系统 智能摆闸价格 人脸识别摆闸 双向摆闸 双机芯摆闸 三辊闸摆闸翼闸 小区摆闸价格 超市自动摆闸 摆闸报价 桥式摆闸价格 豪华摆闸 工厂摆闸 圆柱摆闸 摆闸安装 高档摆闸 翼闸摆闸 摆闸翼闸 高档摆闸厂家 三辊闸摆闸 摆闸控制器 工地摆闸 门禁摆闸 杭州摆闸价格 摆闸供应商 摆闸 摆闸机芯 摆闸批发 摆龙门阵 团队造型摆阵图片 摆龙门阵是什么意思 20人团队造型摆阵图片 10人团队造型摆阵图片 为什么聊天叫摆龙门阵 车内摆饰 摆饰工艺品 客厅电视柜摆饰