在应用程序和包之间共享内存管理器

时间:2010-02-22 10:35:42

标签: delphi memory-management packages

这个问题是对此question.

的跟进

如何实现我的应用程序和我的运行时包使用相同的内存管理器?我认为默认情况是这样,但由于我遇到了奇怪的访问冲突和无效的指针异常,我插入了在进入运行时包和运行时包之前调用GetMemoryManagerState,并且返回的状态似乎表明包和应用程序使用单独的内存管理器。

在调用运行时包中的方法之前,有61个已分配的介质块,并且在调用之后(在包内的被调用方法的开头),有0个已分配的介质块。

你碰巧有解释吗?我需要做些什么来使包和应用程序共享内存管理器?使用FastMM时会出现更复杂的问题吗?

编辑 BTW,有没有更好的方法来检查是否使用了相同的内存管理器而不是比较内存管理器状态? TMemoryManager原来是一张唱片,所以我无法比较地址。

2 个答案:

答案 0 :(得分:4)

包使用与主程序相同的RTL状态。这是包装定义的一部分。

Memorymanager包含。

顺便说一下,关于包裹的说明在这里:http://wiki.freepascal.org/packages

目前FPC还远离这一点(主要是因为需要通过外部链接器在无用的操作系统和架构上实现这一点)。同样由于FPC版本的更多数量,我怀疑它不会像许多人想的那样有用(我不认为Lazarus组件会像二进制FPC等效的BPL / .dcp组合一样分发) / p>

答案 1 :(得分:1)

感谢ldsandonRob Kennedy我发现有必要使用运行时包(至少对于RTL),以便应用程序和包共享内存管理器。

启用“使用运行时包”并将“rtl”添加到包列表解决了该问题。感谢大家的帮助。