FastMM会使您的可执行文件更大吗?我注意到我的应用程序增长了大约300-500kb,这对我来说相当大。我已经关闭delphi编译器选项以排除调试信息,但大小不会改变。
我使用FastMM的FullDebugMode打开,这会影响大小吗?但是当我试图将其关闭时,它会找到我无法找到的libc。
请帮助......我正在使用D5
答案 0 :(得分:9)
首先,它并不重要。使用该选项编制的程序不适用于一般分发。它们旨在帮助您找到问题,以便您可以修复它,然后发送正确版本的程序,而无需启用调试选项。
其次,如果您仍在软盘上分发,则只有半兆字节。这个真正的空间是否取决于你的程序预先有多大。分发时压缩你的程序,你可能很难发现差异。
最后,对于问题的关键,是的,完全调试模式会使您的程序更大。显而易见,启用该模式会添加更多代码。它添加了执行所有调试检查的代码,例如检查堆损坏,生成堆栈跟踪,捕获已释放接口的使用,将错误记录到文件以及记录内存泄漏。它还添加了加载和使用完整调试模式DLL的代码,它改变了任何汇编函数,而不是用普通的Delphi编写。
有关调试信息的编译器选项应该无效。它控制调试信息是否包含在DCU文件中;该信息总是从EXE文件中排除(除非你在谈论TD32调试信息,但是你不应该启用它,因为你没有使用Turbo Debugger)。
如果您的程序正在寻找Libc单元,那么您完成的不仅仅是完全调试模式。你以某种方式在 Linux模式下启用。您没有使用Linux,因此请勿打开该模式。如果您遇到困难,请将 FastMM4Options.inc 的副本替换为原始版本并重新开始。
答案 1 :(得分:1)
FullDebugMode使用FastMM4堆管理器的纯pascal版本。
此版本标记块,以便跟踪和报告任何内存泄漏。
但在所有情况下,它不会永远不会为您的可执行文件添加300-500 KB。
它将比“普通”FastMM4模式慢,因为编码的pascal版本(不如asm优化)以及执行的额外检查(例如块标记)。
但是300-500 KB的可执行文件大小增加与FullDebugMode无关。这只是几十KB(在最坏的情况下),因为大多数使用的代码都保留在外部FastMM_FullDebugMode.dll库中。
您应该手动更改某些项目选项,例如TD32信息或远程调试信息。但据我所知,FastMM4在完全调试模式下不需要这些信息。
答案 2 :(得分:0)
FastMM应该用D5编译,它不应该寻找libc,这是Linux库。在D5(like this)下进行编译时,最新版本存在问题,请从源存储库中尝试最新的源代码?