vcl的所有对象是建立在“堆”上的,因此,所有的“类”类型的对象必须通过.Create来创建,Free来释放。而简单类型的对象不需要,他们是创建在“栈”上的,因此一旦声明,就有了实体,并在超出作用域后会被编译器释放其空间。请问堆和栈的具体区别在哪儿,我记得汇编中的堆栈是指的一特殊存储块,是一个问题.为何DELPHI中要分为堆和栈,意思说它们不是一个问题哟.是这样吗? 

解决方案 »

  1.   

    不止是Delphi中要分,C++语言本身也要分,它们是两个东西,不是一个东西
      

  2.   

    堆:自由存储区,使用时必须人为的分配和释放内存    所有基于TObject的类都在“堆”中操作栈:自动存储区,由编译器负责分配和释放内存    如变量类型:integer string float 等
      

  3.   

    delphi中有些“堆栈”处理的方式是为CB预留的
      

  4.   

    简单告诉你吧:堆:是基于虚拟内存的一种分配方式。实际上堆都是来自虚拟内存,也就是从硬盘空间上划分来的。栈:是计算机内存中的一个特殊区域。某些局部变量、函数等等,由系统自动从栈中分配内存,自动释放。由此可以看出区别了吧?堆因为是需要手工分配,所以释放的任务也就要手工完成。援引教材上的话:栈(stack):  是程序启动时由程序留出的工作内存区。局部变量、函数调用占用的内存通常是由程序自动完成分配和释放。通常一个调用开始,这种分配就开始,当该调用结束,为它分配的内存就会自动释放。  优点:分配内存快  缺点:大小固定,当程序运行超出栈空间,往往容易引起程序的崩溃。堆(heap):  是在Windows中机器所有的虚拟内存。  优点:大小没有限制,只和硬盘物理空间大小有关系。  缺点:动态分配需要额外开销,分配速度慢。另外对程序员本身的水平要求会高些。
      

  5.   

    吾真是万分感谢risingsoft,你帮我解决了困扰我多时的问题.YOU 真伟大.
      

  6.   

    太感谢大家了,我的分都给你们吧.哈哈! 开玩笑的,别当真.我是刚学DELPHI的,而且老已,所以很笨.
    特希望DELPHI能人帮我哟.