本节介绍如何使用内存管理器共享内存。
在Win32和Win64 上,如果 DLL 导出将长字符串或动态数组作为参数或函数结果传递的例程(直接或嵌套在记录或对象中),则 DLL 及其客户端应用程序(或 DLL)必须共享相同的内存经理。如果一个应用程序或 DLL 使用System.New或System.GetMem分配内存,则通过调用另一个模块中的System.Dispose或System.FreeMem释放内存,情况也是如此。有两种互斥的方法可以在应用程序及其库之间共享内存管理器:ShareMem和SimpleShareMem。
在Posix 上,应用程序和共享库已经共享使用系统库,包括 malloc、free 和 realloc。
注意:当 DLL 静态链接到应用程序时,DLL 在应用程序之前被初始化。如果在两者中都使用SimpleShareMem共享方法,则应用程序将使用 DLL 的内存管理器。只有共享其内存管理器的模块才能更改内存管理器设置并检索内存管理器统计信息。更改任何其他模块中的设置将不起作用,因为它们的内存管理器没有被使用。手动控制内存管理器共享机制是可能的,但很少需要。
使用 ShareMem
- 将ShareMem列为程序和库使用子句中的第一个单元。您的模块将依赖于外部BORLNDMM.DLL库,允许它们共享动态分配的内存。
- 部署BORLNDMM.DLL与应用程序或DLL使用ShareMem。当应用程序或DLL使用ShareMem,它的内存管理器通过在存储器管理器替换BORLNDMM.DLL。
使用 SimpleShareMem
- 将SimpleShareMem列为每个模块中程序和库使用子句的第一个单元。首先初始化的模块将是共享其内存管理器的模块。之后初始化的所有模块都将使用第一个模块的内存管理器。
- 首先初始化的模块将是共享其内存管理器的模块。之后初始化的所有模块都将使用第一个模块的内存管理器。