Я - участник в команде, которые разрабатывают приложение Delphi. Требования к памяти огромны. 500 МБ нормальны, но в некоторых случаях это вышло из исключения памяти. Память, выделенная в этом случаи, обычно между 1000 - 1700 МБ.
Мы, конечно, хотим компилятор на 64 бита, но этого не произойдет теперь (и если это происходит, мы также должны преобразовать в unicode, но это - другая история...).
Мой вопрос состоит в том, почему там предел памяти для каждого процесса на 2 ГБ при выполнении в среде на 64 бита. Указатель составляет 32 бита, таким образом, я думаю, что 4 ГБ были бы правильным пределом. Я использую Delphi 2007.
Править: Таким образом, если я установил флаг IMAGE_FILE_LARGE_ADDRESS_AWARE в Delphi при помощи:
{$SetPeFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
И выполняя получающийся EXE-файл на Windows Server 2003 x64 затем приложение может обратиться к 4 ГБ?
Если скомпилировать приложение Delphi с использованием флага /LARGEADDRESSAWARE, то оно сможет адресовать все 4GB на 64-битной ОС. В противном случае, при запуске в WOW32, ОС предполагает, что приложение ожидает ту же среду, что и в 32-битной ОС, что означает, что из 4 ГБ адресного пространства 2 ГБ выделено для ОС и 2 ГБ - для приложения.
http://msdn.microsoft.com/en-us/library/aa366778 (VS.85) .aspx
Виртуальный адрес пользовательского режима пространство для каждого 32-битного процесса: 2 ГБ
Синтаксис Delphi для установки флага LARGEADDRESSAWARE в исполняемом файле PE:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
Поместите это в ваш файл .dpr.