堆和堆栈什么区别????

slothboy 2003-10-15 05:05:46
刚刚学习VC,今天看了一本书
"有些窗口对象以变量的形式嵌入在别的对象内或以局部变量的形式创建在堆栈上,有些则用new操作符创建在堆中。"
不知道堆和堆栈什么区别?
我学数据结构的时候只有队列,堆栈。怎么还有堆阿
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjg325 2003-10-15
  • 打赏
  • 举报
回复
堆栈 应该是操作系统为你的运用程序分配的一个最大4G(win2k) 的空间中的给用户使用的一部分吧,他是可以不停的生长的。如果你在程序中new 了 没有delete 的话就成了野指针,谁也不能回收,只能启动系统了。
xharry 2003-10-15
  • 打赏
  • 举报
回复
这个我也迷惑,我认为是翻译的问题
我个人以为stack = 堆栈 = 栈
qwedcxza 2003-10-15
  • 打赏
  • 举报
回复
那么为什么有时候称作“堆栈”:
有些窗口对象以变量的形式嵌入在别的对象内或以局部变量的形式创建在堆栈上

到底是指堆,还是栈,还是 both?
另外 stack 也被翻译为 堆栈,那么按你上面的解释
stack = 堆栈 = 栈??

我希望搞清楚
谢谢
xharry 2003-10-15
  • 打赏
  • 举报
回复
堆(heap)
为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;
程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。
堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问

栈(stack)
为程序保存的一块内存区域,用来保存状态数据,
例如:过程或函数的地址,参数,有时候还包括局部变量。

所以,堆和栈的区别:一个是动态,一个是静态;
堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;
栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。

malloc , new分配的内存就是在堆上的,如果不用free, delete回收,
就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,
回收分配给这个进程的内存等资源。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧