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

标签 delphi memory-management package

这个问题是这个 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/

相关文章:

go - golang 是否有一个用于下载第三方包的中央存储库?

delphi - 实现远程事件驱动系统需要哪些元素? - 需要概述

delphi - 使用 SO_REUSEADDR 时接收发送到 127.0.0.1 的 UDP 数据包

Delphi 字符串和引用计数

python - 使用 .bat 和 .ini 联网 .py 文件

java - 如何避免库 jar 中的资源冲突?

delphi - TObject 对于在对象销毁时清除接口(interface)字段提供什么保证?

delphi - Delphi 项目的 RELEASE 的 MSBuild 仍然设置 D+ 选项

c++ - 除了使用 new 之外,还有什么会导致内存泄漏? (c++)

c++ - 如何从链表中删除正确的元素?