关于keil中内存分配的问题,局部变量、全局变量,堆栈的分配

看.map文件

图1
图2
图3

从.map文件中可以看出,ram中的数据是如何摆放的:
1.首先从0x20000000开始,放全局变量的数据,如上图2所示,0x20000000以及0x200000004/0x20000008的地方的数据,存放的是全局变量,分别是uart_rxdata、FM_Freq等。
2.放完全局变量之后是用static声明的局部变量,如图1中的n,max_num以及times等,这些在c代码中都是用static声明的局部变量
3.放完这些数据之后,也就是静态存储区结束之后,是堆,根据启动文件,分配堆的空间。
4.堆空间结束后是栈,如图2中的initial_sp,从堆结束继续数0x400后作为栈顶。(注:0x400是在启动文件中设置的栈的大小,自己设定,我这里没有使用堆,编译器貌似优化掉了,因此直接从静态存储区直接数了0x400作为栈区)

总结

画个图
在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值