刚刚学习VC,今天看了一本书
"有些窗口对象以变量的形式嵌入在别的对象内或以局部变量的形式创建在堆栈上,有些则用new操作符创建在堆中。"
不知道堆和堆栈什么区别?
我学数据结构的时候只有队列,堆栈。怎么还有堆阿

解决方案 »

  1.   

    堆(heap)
    为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;
    程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。
    堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问栈(stack)
    为程序保存的一块内存区域,用来保存状态数据,
    例如:过程或函数的地址,参数,有时候还包括局部变量。所以,堆和栈的区别:一个是动态,一个是静态;
    堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;
    栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。malloc , new分配的内存就是在堆上的,如果不用free, delete回收,
    就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,
    回收分配给这个进程的内存等资源。
      

  2.   

    那么为什么有时候称作“堆栈”:
    有些窗口对象以变量的形式嵌入在别的对象内或以局部变量的形式创建在堆栈上到底是指堆,还是栈,还是 both?
    另外 stack 也被翻译为 堆栈,那么按你上面的解释
    stack = 堆栈 = 栈??我希望搞清楚
    谢谢
      

  3.   

    这个我也迷惑,我认为是翻译的问题
    我个人以为stack = 堆栈 = 栈
      

  4.   

    堆栈 应该是操作系统为你的运用程序分配的一个最大4G(win2k) 的空间中的给用户使用的一部分吧,他是可以不停的生长的。如果你在程序中new 了 没有delete 的话就成了野指针,谁也不能回收,只能启动系统了。