delphi 增加32位应用程序内存地址空间,解决“Out of memory”问题

增加32位应用程序内存地址空间,解决“Out of memory”问题

使32 位应用程序能够在64位Windows 访问最大 4GB 内存空间

在应用程序的 .dpr 文件中添加编译指令 {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

uses Winapi.Windows;

{$SETPEFLAGS IMAGE_FILE_LARGE_ADDRESS_AWARE}

32位应用程序的地址空间的默认大小为 2GB,但可以在 32 位 Windows (支持的 Windows 版本 )上增加到 3GB,在 64 位 Windows 上增加到 4GB。地址空间总是有些碎片化,因此对大于 1GB 的单个连续块的 GetMem 请求不太可能成功。

代码

program Project1;

uses
  Vcl.Forms,
  Winapi.Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

D7中Windows单元中没有定义IMAGE_FILE_LARGE_ADDRESS_AWARE常量,需要先定义常量

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

const
  IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020;

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

参考

虚拟地址空间 (内存管理)

PE 格式

PE文件头标志(Delphi)

增加内存地址空间

posted @ 2024-01-27 18:49  txgh  阅读(164)  评论(0编辑  收藏  举报