应该" IMAGE_FILE_LARGE_ADDRESS_AWARE"在Delphi6中工作以有效避免EOutOfMemory错误?

时间:2016-03-08 14:53:17

标签: delphi memory

我从其他帖子中了解到" IMAGE_FILE_LARGE_ADDRESS_AWARE"可以有效地扩展内存可用性,例如: Delphi 2007。

我不能在Delphi6中使用它,这确实是这样,还是应该有效?或者是否有另一个命令执行相同的操作?

如果没有,我可能需要迁移到更高版本的Delphi。然后,有没有人知道最新版本的Delphi是什么,这将很容易让我迁移我现有的代码(理想情况下,我现有的代码,这是相当简单的Turbo Pascal类型代码,将按原样工作)并将支持" IMAGE_FILE_LARGE_ADDRESS_AWARE" '特技'扩大记忆?

非常感谢!

REMCO

1 个答案:

答案 0 :(得分:8)

您可以将IMAGE_FILE_LARGE_ADDRESS_AWARE PE标志应用于Delphi 6应用程序,但您必须注意以下问题:

  • Delphi 6的默认内存管理器Borland内存管理器不支持地址大于2GB的内存分配。您必须使用支持大地址的内存管理器替换内存管理器。例如FastMM。
  • 您的代码可能包含需要找到并修复的指针截断错误。
  • 您使用的任何第三方软件也是如此。这包括Borland RTL和VCL库。我没有遇到这些库的许多问题,但可能是你的程序使用了具有指针截断错误的运行时库的不同部分。
  • 为了在大地址条件下对您的程序进行压力测试,您应该打开top down memory allocation。如果在自上而下的内存分配模式下运行时必须禁用反恶意软件(或其他系统级软件),请不要感到惊讶。在自上而下的内存分配模式下运行时,这种类型的软件非常差。
  • 最后,值得指出的是,大地址识别无法解决所有内存不足的问题。它所做的就是打开32位地址空间的上半部分。您的程序可能需要更多的地址空间。在这种情况下,您需要重新设计程序,或转移到64位编译器。