FastMM和动态加载的DLL

Veg*_*gar 2 delphi dll fastmm

我有一个主机应用程序,它在启动时加载了十几个库.我想从Delphi 7s默认内存管理器切换到FastMM4的完整版本,以获得更好的内存泄漏报告.

我应该在主机应用程序和库的使用部分中包含FastMM4吗?那么共享运行时包呢?


一些补充信息:

  • 我们有一个exe和> 20个dll.每个人都在共享一个运行时包.
  • 我们今天不使用sharemem.不是我知道的.ShareMem不包含在e斗篷或者我今天快速查看的dll中.

其他问题:

  • 我可以在所有项目中的fastmems inc文件中使用相同的选项,还是exe和dll需要不同的设置?

Lie*_*ers 8

摘录自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}