13.1 全局数据、栈和堆**
任何平台上的任何 Object Pascal 应用程序所使用的内存可以分为两个部分:代码和数据。就代码部分而言,程序可执行文件的指令部分、资源(如位图和窗体描述)以及程序使用的库都加载到其内存空间中。这些内存块是只读的,并且在某些平台(如 Windows 上)它们可以在多个进程之间共享。
更有趣的是数据部分。Object Pascal 程序的数据(与大多数其他语言编写的程序一样)存储在三个明显不同的区域中:全局内存、栈和堆。
13.1.1 全局内存
当 Object Pascal 编译器生成可执行文件时,它会程序在整个生命周期中存储存变量所需的空间。在一个Unit的interface或implementation中声明的全局变量属于此类别。请注意,如果全局变量是类类型(也包括字符串或动态数组),则只存储全局内存中的 4 字节或 8 字节对象引用。
您可以在编译程序后使用 Project | Information 菜单项来确定全局内存的大小。您要查看的具体字段是数据大小。图 13.1 显示了近 50K 全局数据(48,956 字节)的使用情况,其中包括程序及其使用的库的全局数据。
图 13.1:已编译程序的信息
全局内存有时被称为静态内存,因为一旦程序加载,变量将保留在原来的位置,因此在程序的生命周期内永远不会释放这些内存。
13.1.2 栈
栈是一个动态内存区域,按照后进先出(