第13章 对象和内存
本章关注 Object Pascal 语言中一项非常具体且相当重要的主题—内存管理。Object Pascal 语言及其运行时环境提供了一种独特的解决方案,介于 C++ 风格的手动内存管理和 Java 或 C# 风格的自动垃圾回收之间。
采用这种介于两者之间的方式在于,有助于避免大多数手动内存管理的麻烦(但显然不是全部),同时又避免了自动垃圾回收带来的限制与问题(包括额外的内存分配和非确定性的资源释放)。
注解:我没有特意深入研究 GC(垃圾回收)策略及其在各个平台上的实现问题,这更多是一个研究课题。在受限设备(如移动设备)上,GC 远非理想之选,但一些相同的问题也存在于每个平台。忽视 Windows 应用程序的内存消耗趋势已经导致我们拥有一些占用大量内存的小型实用程序。
然而,在 Object Pascal 中让情况变得稍微复杂的是,一个变量使用的内存取决于其数据类型,有些类型使用引用计数,而有些使用更传统的方法,包括 VCL 基于组件的所有权模型,以及其他一些选项,这使得内存管理成为一个复杂的主题。本章的目的就是讲述这个主题,从现代编程语言中的内存管理基础以及对象引用模型背后的概念开始。
注解:多年来,Delphi 移动编译器提供了一种称为 ARC(自动引用计数)的不同内存模型。ARC由 Apple 公司在自己的编程语言中推广, 通过编译器支持,用于跟踪和计算对对象的引用,当对象不再需要(即引用计数降至零)时销毁。这与 Delphi 在所有平台上接口引用的情况非常相似。从 Delphi 10.4 开始,对所有平台的 ARC 支持已从语言中移除。