我有一个主机应用程序,它在启动时加载了十几个库.我想从Delphi 7s默认内存管理器切换到FastMM4的完整版本,以获得更好的内存泄漏报告.
我应该在主机应用程序和库的使用部分中包含FastMM4吗?那么共享运行时包呢?
一些补充信息:
其他问题:
摘录自FastMM4options.inc文件.
对我而言,这意味着如果所有的包,dll和可执行文件都是用ShareMM编译的,那么应该可以替换Delphi 7s的默认内存管理器.
{-----------------------内存管理器共享选项---------------------- - }
{允许在主应用程序和也使用FastMM编译的DLL之间共享内存管理器.这允许您将动态数组和长字符串传递给DLL函数,前提是它们都被编译为使用FastMM.共享仅在应该共享内存管理器的库是使用"AttemptToUseSharedMM"选项集编译时才有效.请注意,如果主应用程序是单线程且DLL是多线程的,则必须将主应用程序中的IsMultiThread变量设置为true,否则在发生线程争用时它将崩溃.请注意,静态链接的DLL文件在主应用程序之前初始化,因此主应用程序最终可能最终共享静态加载的DLL的内存管理器,而不是相反.}
{.$ define ShareMM}
{允许DLL与其他DLL(或主应用程序,如果这是一个静态加载的DLL)共享内存管理器,这些DLL也是使用FastMM编译的.在动态加载的DLL中小心设置此选项,因为如果正在卸载共享其MM的DLL并且任何其他DLL仍在共享MM,则应用程序将崩溃.此设置仅与DLL库相关,并且还要将ShareMM设置为具有任何效果.共享仅在应该共享内存管理器的库是使用"AttemptToUseSharedMM"选项集编译时才有效.请注意,如果DLL是静态链接的,那么它们将在主应用程序之前初始化,然后DLL实际上将与主应用程序共享其MM.
{.$ define ShareMMIfLibrary}
{定义此选项以尝试在使用ShareMM集编译的同一进程中共享主应用程序的MM或其他已加载的DLL.共享内存管理器时,共享器导致的内存泄漏不会自动释放.考虑到在主应用程序之前初始化静态链接的DLL,因此请相应地设置共享选项.}
{.$ define AttemptToUseSharedMM}
{定义此项以启用Delphi 2006和2007使用的内存管理器共享机制的向后兼容性,以及旧的FastMM版本.}
{$ define EnableBackwardCompatibleMMSharing}
| 归档时间: |
|
| 查看次数: |
4190 次 |
| 最近记录: |