技术积累 — Keil 查看内存占用/优化代码

原文链接:转自Sugar的专栏(转载文章,若有不妥,通知后我会立即删除)

一、查看内存占用:

1、使用Keil编辑代码时,编译成功后,双击红色框框位置,就会弹出*.map文件;

2、那么map文件中能够读出哪些信息呢?

//Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 

Code是代码占用的空间;

RO-data是 Read Only 只读常量的大小,如const型;

RW-data是(Read Write) 初始化了的可读写变量的大小;

ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。

ZI-data不会被算做代码里因为不会被初始化。

简单的说就是在烧写时FLASH中被占用的空间为:Code + RO Data + RW Data

程序运行的时候,芯片内部RAM使用的空间为: RW Data + ZI Data

问题1:为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据被重新赋值的,每次这些固定的值就存储在Rom中;

问题2:为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费空间。

 二、优化代码空间:

未进行代码优化时的空间大小,如图,未进行任何优化时,keil编译生成的文件大小为:18340字节。 

第一步:project >> Option for Target “**”打开如图界面。选择“target”,勾选上“UseMicroLIB”再编译。

分析:microLIB是缺省的C库,而且microLIB进行了高度优化。如果不勾选“Use MicroLIB”,keil会连接标准C库。所以勾选“UseMicroLIB”会减小code大小。 

第二步:project >> Option for Target “**”打开如图界面。选择“C/C++”,勾选上“One ELFSection per Functin”再编译。

分析:“One ELF Section per Functin”就是将每个函数都生成一个ELF文件,最会将需要的函数链接成一个大的ELF文件。但是如果没有勾选“One ELF Section per Functin”。Keil将每个文件编译成一个ELF文件(即使文件中用未被使用的函数),最会链接成一个ELF文件。所以勾选“One ELF Section per Functin”会使code变小。

  • 20
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值