编译结果中代码与数据的存储的理解

最近在优化一个项目,想要尽可能地压缩代码,腾出空间写新的业务逻辑。看多了.map文件,有了一些新的理解。我用的编译器是IAR,可能编译出来的.map文件跟keil不一样,但是原理应该是一致的。

先说一些基本的概念。

程序编译后,主要分成三大部分。text,data,bss。

text就是编译后的代码

data就是变量,全局变量,局部的静态变量,而且还是有初始值的,亦即是是初始值不是0。至于为啥要单独存储全局变量和局部的静态变量待会说。

bss也是变量,也是全局变量,局部的静态变量,但是是没有初始值的,亦即是初始值是0。

放几张.map文件的图来看一下。

 

可以看出来,.intvec也就是中断向量表,被放在了flash的起始地址,这个是M3内核决定的。

.text也就是代码,kind里也写着了,ro code。只读代码。很重要的信息是size 和object。object告诉你是哪个源文件,size告诉你多大。有了这两个信息,我们就可以知道代码中有哪个源文件占用空间多,可以定点打击,专门优化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值