私はDelphi 2007を使用しているため、32ビットの使用可能メモリの制限があります。プロセス用に使用可能なメモリを取得する
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} // Allows usage of more than 2GB memory
これは私は、プロセスの現在のメモリ使用状況を取得するために使用する方法であって:
function MemoryUsed: Int64;
var
PMC: _PROCESS_MEMORY_COUNTERS_EX;
begin
Win32Check(GetProcessMemoryInfo(GetCurrentProcess, @PMC, SizeOf(PMC)));
Result := PMC.PrivateBytes;
end;
IMAGE_FILE_LARGE_ADDRESS_AWARE
PEフラグを使用
、代わりに2ギガバイトの制限3ギガバイトがあるはず
これで、プロセスに使用可能なメモリの合計量を取得する方法が必要になりました。約3 GBにする必要があります。しかし、私はそれをハードコードしたくありません。将来、新しいDelphiと64ビットに移行する予定です。
私はどのWin32 API関数を使用しますか?
利用可能なメモリ - 利用可能なコンピュータ - おそらく8 GBのRAMがインストールされている可能性があります。さらに必要な場合、OSはメモリをディスクにスワップします。
処理可能なメモリ - 実行可能ファイルとWindowsの制限。現在、ほとんどのWindowsは64ビットなので、問題はありません。しかし、実行可能ファイルがIMAGE_FILE_LARGE_ADDRESS_AWARE
で32ビットとしてコンパイルされている場合、制限は3 GBにする必要があります。実行可能ファイルが64ビットであれば、それははるかに大きく、おそらく64GBになります(ただし、インストールされているRAMが少なくてもスワッピングが発生する可能性があります)。
私の質問は、どのようにプロセスの使用可能なメモリを取得できますか?
使用可能なメモリを定義してください。あなたのプロセスは64ビットシステム上で完全な4GBのアドレス空間を使うことができます。それは、現在予約されていない、与えている、または取っているすべてのスペースを割り当てることができます。とにかく情報で何をするつもりですか? –
私は質問 –
を明確にしようとしています。それであなたが望むアドレス空間の量です。 2、3、または4のいずれかです。3とは考えにくい。最近、/ 3gbスイッチで起動する多くの32ビットシステムが見つかりません。 –