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

[复制链接]
315|14
手机看帖
扫描二维码
随时随地手机跟帖
wangzsa|  楼主 | 2017-4-21 23:30 | 显示全部楼层 |阅读模式
堆和栈的地址空间是否一定要连续?
langgq| | 2017-4-21 23:33 | 显示全部楼层
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
wangzsa|  楼主 | 2017-4-21 23:34 | 显示全部楼层
比如我将堆放到第一个地址空间即0x40000000中而栈放到第二个空间即0x7FD00000中,结果系统会出问题,不知道是否堆栈必须要连续的?

使用特权

评论回复
lium| | 2017-4-21 23:36 | 显示全部楼层

1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

使用特权

评论回复
yufe| | 2017-4-21 23:37 | 显示全部楼层
2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

使用特权

评论回复
wangzsa|  楼主 | 2017-4-21 23:39 | 显示全部楼层
这是最常见的解释堆和栈,但我没领会了

使用特权

评论回复
wangpe| | 2017-4-21 23:40 | 显示全部楼层
栈:是一块连续的内存的区域。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

使用特权

评论回复
zhuww| | 2017-4-21 23:45 | 显示全部楼层
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用特权

评论回复
guoyt| | 2017-4-21 23:46 | 显示全部楼层
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

使用特权

评论回复
yufe| | 2017-4-21 23:48 | 显示全部楼层

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

内存不用连续

使用特权

评论回复
wangpe| | 2017-4-21 23:50 | 显示全部楼层
百度的吧

使用特权

评论回复
zhanglli| | 2017-4-21 23:52 | 显示全部楼层
栈:是一块连续的内存的区域。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。
堆的使用相对简单一点   个人的理解   呵呵、

使用特权

评论回复
yufe| | 2017-4-21 23:54 | 显示全部楼层
在嵌入式系统中,栈的分配是由系统自动分配和自动回收的,在程序结束后栈空间就没有了,每个进程都有自己的栈,堆的分配是由程序员用 malloc(size),来分配的,malloc返回的是堆的地址,可以对之进行操作,而堆在程序结束后还会存在,系统不会自动回收堆的空间,而要求程序员利用free来释放该空间,总结下就是,栈是自动分配 自动回收,堆是程序员分配 程序员回收

使用特权

评论回复
wangzsa|  楼主 | 2017-4-21 23:56 | 显示全部楼层
不管啥,有用就行,哈哈

使用特权

评论回复
kk5004| | 2017-5-4 11:02 | 显示全部楼层
你好,我這邊是 希特電子(深圳)有限公司, 是中國大陸笙泉MCU的代理商  有需要解決的技術問題可以 加我 QQ 328626444 詳細聊聊,   潘,R

使用特权

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

本版积分规则

914

主题

9040

帖子

5

粉丝