2016-03-08 27 views
2

我從這裏的其他帖子瞭解到「IMAGE_FILE_LARGE_ADDRESS_AWARE」可能有效地擴展了內存的可用性。德爾福2007年。應該在Delphi6中使用「IMAGE_FILE_LARGE_ADDRESS_AWARE」以有效避免EOutOfMemory錯誤?

我不明白這是在德爾福6工作,這確實是這樣,或者它應該工作?還是有一個替代命令可以做同樣的事情嗎?

如果不是,我可能需要遷移到Delphi的更高版本。那麼,有沒有人知道最新版本的Delphi是什麼,可以輕鬆讓我遷移我現有的代碼(理想情況下,我現有的代碼,這是相當簡單的Turbo Pascal類型的代碼,將工作原樣)AND將支持'IMAGE_FILE_LARGE_ADDRESS_AWARE''trick'擴展內存?

非常感謝!

REMCO

+0

雖然很難說明顯,但也可能值得確認沒有內存泄漏或堆腐敗問題等。如果您不確定爲什麼內存不足,那麼它非常重要你明白原因。如果您知道您對該內存有合理的需求,則通過在其上放置更大的地址空間來解決問題只會起作用。即使這種需求是合理和必要的,但通過簡單的重構,通過改變您的分配和使用策略,可以顯着減少應用程序中的內存壓力。 –

回答

8

您可以將IMAGE_FILE_LARGE_ADDRESS_AWARE PE標誌,以一個Delphi 6應用程序,但你必須提防以下問題:

  • 德爾福6默認的內存管理器,Borland的內存管理器,不支持地址大於2GB的內存分配。您必須將內存管理器替換爲支持大地址的內存管理器。例如FastMM。
  • 您的代碼可能包含需要找到並修復的指針截斷錯誤。
  • 這同樣適用於您使用的任何第三方軟件。這包括Borland RTL和VCL庫。我沒有遇到這些庫的許多問題,但可能是您的程序使用了運行時庫的具有指針截斷錯誤的不同部分。
  • 爲了在大地址條件下對程序進行壓力測試,您應該打開top down memory allocation。如果您在以自頂向下的內存分配模式運行時必須禁用您的反惡意軟件(或者其他系統級軟件),請不要驚訝。這種類型的軟件在自頂向下的內存分配模式下運行時出了名。
  • 最後,值得指出的是,大地址感知無法解決所有內存不足的問題。它所做的只是打開32位地址空間的上半部分。你的程序可能需要更多的地址空間。在這種情況下,您需要重新設計程序,或轉移到64位編譯器。