SafeMM for Delphi XE2

8
有没有人将SafeMM调试内存管理器移植到Delphi XE2?CodeCentral上的2009版SafeMM无法编译,因为RTL现在使用NativeInt而不是Integer来进行内存函数。

你是否考虑过在适当的地方将 Integer 的声明更改为 NativeInt - LaKraven
1
我不确定这会是那么简单的。我想问一下,是否已经有人将SafeMM移植到Win64上了,这样我就不需要重复别人的努力了。 - Jan Goyvaerts
2
现在大多数人不都是使用FastMM的完整调试模式吗?它似乎可以捕获我曾经遇到的所有问题,并且完全支持XE2和64位。 - Brian Frost
如果您将其移植,我会很好奇64位Windows应用程序[因为它们可以分配超过2 GB的RAM]是否是实现内存安全测试的绝佳方式。使用SafeMM,我很快就达到了2 GB的限制,在堆大小约为100 MB的应用程序上,SafeMM消耗了> 2 GB的内存。 - Warren P
@WarrenP:使用SafeMM的Win64应用程序将能够使用PC的所有内存,因此它将比编译为Win32的相同应用程序具有更大的余地。 - Jan Goyvaerts
1个回答

4
我已将SafeMM的Delphi XE2移植版上传到CodeCentral。我验证了它正确分配大于4 GB的块,并且在Win64应用程序中分配超过4 GB的较小块时仍能正常工作,并且在Win32应用程序中也可以正常工作。
我于2012年7月7日更新了我的CodeCentral提交,以修复一个错误,该错误会导致SafeMM在两个线程同时尝试释放大块(> 4KB)时崩溃。此错误由原始开发者在SafeMM的0.3版本中引入。如果您正在使用此版本的SafeMM与旧版Delphi一起使用,则需要像我一样在FreeLargeBlock中包装代码以进行临界区域处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接