打印

关于栈空间和堆空间的区别

[复制链接]
1764|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2012-10-8 23:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
baidudz| | 2012-10-9 00:05 | 只看该作者
不管是stack还是heap
都是一块内存

栈空间的分配和释放由SP自动管理
局部变量放在栈空间
出变量作用域后SP自动调整
就相当于释放空间了

堆空间由用户负责分配和释放

使用特权

评论回复
板凳
火箭球迷| | 2012-10-9 00:20 | 只看该作者
建议学一下用汇编编程,这样你就彻底理解了

使用特权

评论回复
地板
pkat| | 2012-10-9 00:24 | 只看该作者
我谈谈我的理解,栈空间其实就是SP指向的一个地址空间,用于保存CPU寄存器和局部变量以及中间参数,主要特性是先入后出,并且这个入和出在用C语言编程的时候是编译时自动安排的,一般不会出现错误。

但是堆空间呢,你看一下51单片机的启动代码就知道了,其实就是一个给了头地址的一块区域,大小是指定的,头地址是知道的,且在刚开始的时候是空的,即编译器把这块内存保留了下来,不分配给其他变量。其实就相当于自己定义一个全局数组,以供使用。具体这个堆怎么用,就由用户自己安排了,安排的基准就是那个堆头地址和堆大小。

要想深入了解,可以看看UCOS-II的内存管理部分

使用特权

评论回复
5
lagogo2012| | 2012-10-15 20:38 | 只看该作者
会使用就行了,很多概念性的问题都很难理解

使用特权

评论回复
6
hsbjb| | 2012-10-15 23:46 | 只看该作者
熟悉一下汇编,就都能理解了

使用特权

评论回复
7
smilingangel| | 2012-10-17 16:37 | 只看该作者
跟楼上各位先学习这两个概念的了,我在查查资料的看下

使用特权

评论回复
8
summerlover| | 2012-10-17 20:40 | 只看该作者
栈上的空间,是自动回收的,虽然省事,但如果你不想让它自动回收,你就不能用栈来空间来创建对象,典型例子是你在一个函数内部创建一个对象,然后想把它的地址传给函数外层用,你就不能在栈上创建这个对象,因为当函数一结束,此对象就被销毁了,外面访问它会出错。
而堆的话由于是完全手工创建手工回收,再碰到delete之前这个对象是不会被销毁的,就可以随意传递。

使用特权

评论回复
9
dfsa| | 2012-10-24 07:34 | 只看该作者
这个需要深刻理解一下汇编

使用特权

评论回复
10
sinadz| | 2012-10-24 07:54 | 只看该作者
找本汇编的书翻翻

使用特权

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

本版积分规则

229

主题

2603

帖子

1

粉丝