【问题标题】:SafeMM for Delphi XE2德尔福 XE2 的 SafeMM
【发布时间】:2012-01-06 01:05:39
【问题描述】:

有人将 SafeMM 调试内存管理器移植到 Delphi XE2 吗? 2009 SafeMM on CodeCentral 无法编译,因为 RTL 现在使用 NativeInt 而不是 Integer 作为内存函数。

【问题讨论】:

  • 您有没有考虑过在适当的地方将Integer 的声明更改为NativeInt
  • 我不确定它会这么简单。在我自己尝试之前,我想我会问是否有人已经将 SafeMM 移植到 Win64,所以我不会不必要地重复其他人的努力。
  • 现在大多数人不是在完全调试模式下使用 [FastMM] (sourceforge.net/projects/fastmm) 吗?它似乎抓住了我曾经扔过的几乎所有讨厌的东西,并且完全是 XE2 和 64 位。
  • 如果您移植它,我会很好奇 64 位 Windows 应用程序 [因为它们可以分配超过 2 gigs 的 RAM] 是否是启用内存安全测试的一种非常好的方法。使用 SafeMM,我很快就达到了 2 GB 的限制,在实际堆空间约为 100 MB 的应用程序上,SafeMM 消耗 > 2 GB。
  • @WarrenP:使用 SafeMM 的 Win64 应用程序将能够使用 PC 的所有内存,因此它比为 Win32 编译的相同应用程序具有更多的空间。

标签: delphi memory-management delphi-xe2


【解决方案1】:

我已将我的Delphi XE2 port of SafeMM 上传到 CodeCentral。我已经验证它可以正确分配大于 4 GB 的块,并且在 Win64 应用程序中使用时可以分配超过 4 GB 的较小块,并且它在 Win32 应用程序中仍然可以正常工作。

我在 2012 年 7 月 7 日更新了我的 CodeCentral 提交,以修复当两个线程尝试同时释放一个大块 (> 4KB) 时导致 SafeMM 崩溃的错误。此错误是由其原始开发人员在 SafeMM 0.3 版中引入的。如果您将此版本的 SafeMM 与旧版本的 Delphi 一起使用,则需要像我在我的版本中所做的那样,将 FreeLargeBlock 中的代码包装在关键部分中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多