2

我有一个使用 FastMM4 的 D2006 应用程序(例如,它在 DPR 文件的 uses 子句的开头有“FastMM4”)。我知道 Delphi 无论如何都使用 FastMM4 作为它的内存管理器,但是下载的版本有更多的调试转储选项。

我最近尝试在运行 Windows XP Embedded 的单板平板型工业 PC 上运行该应用程序。该处理器是非英特尔“Vortex”芯片。该应用程序在启动时因内存错误而失败,然后退出并出现 FastMM4 关于在释放内存后访问内存的投诉。

从源代码中删除 FastMM4 的所有痕迹似乎可以治愈它 - 应用程序运行良好。

我的问题。导致此问题的 FastMM4 的下载版本是什么?我见过一些关于 FastMM4 和非 Intel 处理器崩溃的轶事,似乎与使用 ASM 代码有关。FastMM4 包含一个强制生成非 ASM 代码的指令,但这并不能解决问题。

我有点担心集成 D2006 版本的 FastMM4 可能仍然存在问题,但我还没有看到。

4

2 回答 2

2

答案是:什么都没有。

Windows XP Embedded 只是没有某些组件的 Windows XP,仅此而已。存在的那些组件与普通 XP 中的组件相同(二进制等效,偶数)。基本上,XPE删除了一些 DLL 并且一些注册表项不存在的 XP(我知道我在这里过度简化了事情)。

因此,它对您的应用程序产生的唯一区别是某些库可能会丢失,并且某些组件可能未正确安装。据我所知,FastMM 不依赖任何特殊组件,除了明显存在的核心 Win32 API,否则您的应用程序根本不会运行(几乎没有任何用户模式会运行)。

因此,问题不在于 FastMM4,而在于其他问题。很可能是对丢失库的处理不当。可能您的代码的某些部分会动态加载 DLL,但无法验证它是否真的被加载,或者从注册表中读取某些设置并且无法处理丢失的数据。这会导致内存损坏,运气好的话,当您使用一个内存管理器时会变得很明显,而使用另一个内存管理器则不会。

于 2010-08-26T16:54:44.590 回答
1

规则#1:先责怪你的代码,然后再责怪他人

代码中查找错误的文章:在调试模式下使用内存管理器Delphi 中的内存问题

于 2010-08-27T11:52:48.243 回答