技术积累 — Keil 查看内存占用/优化代码
2018-02-27 11:39
549 查看
原文链接:转自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变小。
一、查看内存占用:
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变小。
相关文章推荐
- nios中优化代码和减少程序占用内存空间的设置方法
- keil软件查看内存占用情况
- 关于android应用内存占用查看及优化
- IAR for MSP430时,如何查看编写代码占用字节数、内存占用情况、堆栈溢出
- 用gcc查看c源文件的汇编代码 C++性能优化技术导论
- MYSQL千万级数据量的优化方法积累(max_allowed_packet最大内存占用设置)
- 关于Android应用内存占用查看及优化
- [Java] 查看java对象的内存占用情况--java 优化系列
- linux 内存占用情况查看并优化
- 如何查看进程实际的内存占用情况详解
- iOS - 代码查看控制台打印内存使用情况:
- J2ME内存占用详解及优化方法
- JavaScript内存管理——优化内存占用
- 如何优化图片占用的内存空间?
- 如何优化内存?Unity中的内存种类;冯乐乐的总结的优化技术。
- python代码技术优化
- 查看linux占用内存/CPU最多的进程
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
- 减少windows7内存占用的优化方案
- Linux下如何查看哪些进程占用的CPU内存资源最多