打印
[开发工具]

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

[复制链接]
112|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yujielun|  楼主 | 2023-11-13 07:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看.map文件



从.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作为栈区)

总结

画个图


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

3002

帖子

3

粉丝