OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4138|回复: 4

关于STM32内存,堆栈等问题恳请原子哥和各位大牛指导~~~

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-6-2 15:40:57 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 liuchang 于 2016-6-2 15:42 编辑

小弟昨晚拜读了原子哥的帖子,感觉很有收获,但是也带来了新的疑惑,恳请指教~~~
http://www.openedv.com/forum.php ... digest%26digest%3D1

问题1:这里的RW-data和ZI-data指的是"堆"+"栈"的总内存了吗?也就是整个RAM吗?
可是我看网上有人说:RW-data和ZI-data分别指已经初始化和未初始化的全局变量.
难道RAM只是包含全局变量?局部变量,函数调用栈消耗,动态内存分配消耗的堆内存都忽略了???


问题2:如果MSP=0x20000758,Stack_Size EQU 0x00000400,那么栈的活动空间大小就是0x20000758~0x20000358吗(向下增长)?
                                        Heap_Size EQU 0x00000200,那么堆的活动空间大小就是0x20000000~0x20000200吗(向上增长)?   可以这样理解吗?


最佳答案

查看完整内容[请看2#楼]

1.默认情况下,堆和栈都是ZI-data. ZI-data就是初始化为0的数据,也就是你定义的全局变量和静态变量,没有赋初始值,或者初始值为0的那些,比如 int a; static int b; RW-data就是非0初始化的数据,也是全局变量和静态变量,但是初始化值不为0,比如int c=5; static int d = 10;等等,RW数据的初始化值是右存放在ROM里的. 动态变量消耗的是堆空间,堆空间是提前分配好的ZI-data,局部变量消耗的是栈空间,也是提前分配好的ZI-data.就 ...
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-6-2 15:40:58 | 显示全部楼层
1.默认情况下,堆和栈都是ZI-data.
  ZI-data就是初始化为0的数据,也就是你定义的全局变量和静态变量,没有赋初始值,或者初始值为0的那些,比如 int a; static int b;
  RW-data就是非0初始化的数据,也是全局变量和静态变量,但是初始化值不为0,比如int c=5; static int d = 10;等等,RW数据的初始化值是右存放在ROM里的.
  动态变量消耗的是堆空间,堆空间是提前分配好的ZI-data,局部变量消耗的是栈空间,也是提前分配好的ZI-data.就是已经定义好了的两个数组,uint8_t heap[512];和uint8_t stack[1024];
2.栈是向下增长的,这可以通过PUSH指令看出来,MSP或PSP中的值是当前栈顶,如果有压栈动作,MSP或PSP会减小.
  堆就不存在向上向下增长的说法了,因为堆的数据结构是链表,堆是在__main中调用的C库函数初始化的,由malloc和free维护链表.注意堆链表结构是在堆空间里的,所以,应用程序不可能分配到整个堆大小的空间,比如堆定义时分配了512字节,应用程序最多可能只能分配到480字节.
最后给你看下一个应用程序只有堆栈占用内存的情况. QQ截图20160603005936.png
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-6-3 00:17:07 | 显示全部楼层
自己先顶起来
电子爱好者
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-2-29
在线时间
8 小时
发表于 2016-10-13 09:17:17 | 显示全部楼层
顶!d=====( ̄▽ ̄*)b,起
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-10-13 09:44:27 | 显示全部楼层
顶,学习!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 10:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表