本文环境Delphi XE 10.2
我们知道在Delphi中,全局变量存储在应用程序数据段中,其生命周期直至整个应用进程终止;局部变量存储在应用程序栈中,其生命周期直至当前声明的函数方法返回;以GetMem,New等方法动态申请的内存由堆分配,其生命周期直至以FreeMem或Dispose方法销毁;长字符串(Long string), 宽字符串(wide string), 动态数组(dynamic array), 变体(variant),和接口(interface)的存储内存也是堆分配的, 但他们的内存管理是自动的(编译器自动插入引用计数相关代码); 对象(TObject)的存储内存通过构造函数由堆分配的,通过析构函数销毁。
Delphi高版本自带的内存管理器实现了堆分配的内存地址对齐。在Win32平台上,内存管理器分配的内存块起始地址默认对齐于8字节,也可以通过System.SetMinimumBlockAlignment设置对齐类型为16字节来提高访问性能。在Win64平台上,内存管理器分配的内存块起始地址对齐于16字节。
编译器的基础对齐支持:
1,静态数据(全局变量和typed常量)
按其类型对齐参数对齐以优化访问。
2,栈数据(局部变量)
编译器不保证对齐.