书上的一段话:
“Object Pascal无法像C++那样在应用程序的数据段中为类分配内存,而只能在堆中分配内存。”
怎样理解这段话?请解释一下堆、数据段的概念!

解决方案 »

  1.   

    内存分配分堆和栈两个地方。对象是分配在堆中的。
    所以你就需要手动Free.
      

  2.   

    MyObj := TMyClass.Create;
    编译器是在堆上创建对象,
    MyObj是一个指针,
    指向被创建的对象的地址。
    C++我不熟悉,应该灵活的多。
      

  3.   

    调用代码段中的数据属于内存的静态分配,内存在程序编译的时候就已经分配好,运行时只是将代码段映射到内存中,这块内存在程序的整个运行期间都存在。如全局变量、常量就是在代码段中定义的!还有两种动态分配方式!在栈上分配,在执行函数时,如函数内,如寄存器使用完后局部变量的存储单元可以在栈上创建,函数执行结束时这些存储单元自动被释放。速度快,但空间有限!在堆上分配,程序在运行的时候用GetMem或New(对应C中的Malloc或New)申请任意多少的内存,用FreeMem或Dispose(C中Free或Delete)释放内存。这种基础知识找本汇编教材看看很容易建立起完整概念网上关于EXE文件PE结构,数据结构的资料很多,搜索引擎搜索~~~