delphi的对象名只是个指针吗
1个回答
展开全部
源码编译成机器码后,所有变量名都变成了内存地址,Delphi, C++ 和其他编译语言都是这样。像整数这样的变量,会在此地址处直接划出四个字节存储整数值。静态数组也是这样,不同的只是所划分内存要根据数组类型和大小来定。静态变量无需释放内存。其内存是在程序加载时自动划分的,程序退出时这段内存将随整个代码自动释放。
动态数组则不然,此内存地址在编译时只划分出四个字节(32位系统下)作为指针,其数据所占的内存要在程序运行时临时申请,其起始地址就保存在这个指针变量中。这种动态内存在程序退出前必须得释放,要不然会变成垃圾。这种释放也许得由应用程序显式执行,也许会由编译程序隐式执行,不同语言有不同做法。
对象的内存管理和数组很相似,分为静态对象和动态对象,不同语言有不同管理方式。Delphi 不支持静态对象,所有对象变量都是指针,对象所占内存空间必须在程序执行时通过 Create 来申请,程序退出前也必须通过 Free 或 Release 来释放。
对象和数组的不同之处是:对象包含数据和函数代码两部分。同一对象的不同实例都有各自独立的数据部分,都要占用内存空间,所以不同对象实例不会相互干扰。函数代码所占内存只申请一次,所有实例共享同一内存空间。同一线程中也不会相互干扰。但在不同线程中就需要考虑访问冲突问题,有时候需要用特殊手段避免冲突。
动态数组则不然,此内存地址在编译时只划分出四个字节(32位系统下)作为指针,其数据所占的内存要在程序运行时临时申请,其起始地址就保存在这个指针变量中。这种动态内存在程序退出前必须得释放,要不然会变成垃圾。这种释放也许得由应用程序显式执行,也许会由编译程序隐式执行,不同语言有不同做法。
对象的内存管理和数组很相似,分为静态对象和动态对象,不同语言有不同管理方式。Delphi 不支持静态对象,所有对象变量都是指针,对象所占内存空间必须在程序执行时通过 Create 来申请,程序退出前也必须通过 Free 或 Release 来释放。
对象和数组的不同之处是:对象包含数据和函数代码两部分。同一对象的不同实例都有各自独立的数据部分,都要占用内存空间,所以不同对象实例不会相互干扰。函数代码所占内存只申请一次,所有实例共享同一内存空间。同一线程中也不会相互干扰。但在不同线程中就需要考虑访问冲突问题,有时候需要用特殊手段避免冲突。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询