堆和栈的地址空间是否一定要连续?

[复制链接]
2386|34
 楼主| zhaoxqi 发表于 2018-4-13 17:19 | 显示全部楼层 |阅读模式
堆和栈的地址空间是否一定要连续?
jlyuan 发表于 2018-4-13 17:21 | 显示全部楼层

1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
jlyuan 发表于 2018-4-13 17:26 | 显示全部楼层
2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
 楼主| zhaoxqi 发表于 2018-4-13 17:31 | 显示全部楼层
这是最常见的解释堆和栈,但我没领会了
yszong 发表于 2018-4-13 17:37 | 显示全部楼层
栈:是一块连续的内存的区域。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
heweibig 发表于 2018-4-13 17:40 | 显示全部楼层
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
heweibig 发表于 2018-4-13 17:43 | 显示全部楼层
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
 楼主| zhaoxqi 发表于 2018-4-13 17:47 | 显示全部楼层

还是些百度的东西吧
jiahy 发表于 2018-4-16 09:36 | 显示全部楼层

malloc()申请使用堆,push使用栈

内存不用连续
dengdc 发表于 2018-4-16 09:39 | 显示全部楼层

如果能分开指定,不用连续。
如果只能指定一个,另外一个是链接文件里面根据上面的计算的,那么分配出来默认是连续的。
jlyuan 发表于 2018-4-16 09:42 | 显示全部楼层
堆和栈的概念主要是在计算机编程中,10楼的解释是对的,不过局部变量也存在于栈中间。在单片机编程中很少涉及。
午夜粪车 发表于 2018-4-16 09:46 | 显示全部楼层

局部非static变量,以及函数形参变量都存在于栈中。对于堆我不了解。
liliang9554 发表于 2018-4-16 09:50 | 显示全部楼层

这两个概念    理解的不是很透彻    楼主    顶一个    有时间    需要好好看看  
lizye 发表于 2018-4-16 09:53 | 显示全部楼层

堆是向高地址扩展的数据结构,是不连续的内存区域
jiaxw 发表于 2018-4-16 09:59 | 显示全部楼层

栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等
spark周 发表于 2018-4-16 10:02 | 显示全部楼层

malloc()申请使用堆,push使用栈

内存不用连续
 楼主| zhaoxqi 发表于 2018-4-16 10:12 | 显示全部楼层
谢谢各位大侠。留个印,下次知道怎么做了。
午夜粪车 发表于 2018-4-16 10:16 | 显示全部楼层
那位能提供一份MSP430F5310的外围电路的原理图
jiajs 发表于 2018-4-16 10:19 | 显示全部楼层
可以参考这个http://www.ti.com/lit/ug/slau278h/slau278h.pdf
dengdc 发表于 2018-4-16 10:22 | 显示全部楼层
这几天刚好也在用5310的片子,这是我画的最小系统电路,用JYB-FET430PIF仿真器下程序时可以擦出Flash,但是烧程序总出错,恳请各位高手指点是最小系统的问题还是仿真器的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部