这个问题是这个 question. 的后续问题
如何实现我的应用程序和运行时包使用相同的内存管理器?我认为默认情况下就是这种情况,但由于我遇到了奇怪的访问冲突和无效指针异常,所以我插入了在进入运行时包之前和运行时包中调用 GetMemoryManagerState
,返回的状态似乎表明包和应用程序使用单独的内存管理器。
在调用运行时包中的方法之前,有 61 个分配的介质 block ,调用后(在包内被调用方法的开头)有 0 个分配的介质 block 。
你对此有解释吗?我需要做什么才能使包和应用程序共享内存管理器?使用FastMM时还有更复杂的问题吗?
编辑顺便说一句,有没有比比较内存管理器状态更好的方法来检查是否使用相同的内存管理器? TMemoryManager
结果是一条记录,所以我无法比较地址。
最佳答案
包使用与主程序相同的 RTL 状态。这是包定义的一部分。
包含内存管理器。
顺便说一句,我关于包的注释在这里:http://wiki.freepascal.org/packages
目前 FPC 距离这个目标还很远(主要是因为需要通过外部链接器在无数操作系统和架构上实现这一点)。另外,由于规则中的 FPC 版本数量较多,我怀疑它的用处不会像许多人想象的那么大(我不希望 Lazarus 组件以相当于 BPL/.dcp 组合的二进制 FPC 形式分发)
关于delphi - 在应用程序和包之间共享内存管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2310273/