我使用Delphi 2007,因此存在32位的可用內存限制。爲進程獲取可用內存
使用IMAGE_FILE_LARGE_ADDRESS_AWARE
PE標誌,應該有一個3 GB的限制,而不是2 GB:
{$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;
現在我想要一種方法來獲取進程可用內存的總量。它應該在3 GB左右。但我不想對它進行硬編碼,因爲將來我們會轉向新的Delphi和64位。
我應該使用什麼樣的Win32 API函數?
可用內存 - 計算機可用內存 - 可能安裝了8 GB RAM。如果需要更多內存,操作系統將開始將內存交換到磁盤。
進程可用內存 - 可執行文件和Windows中的限制。現在大多數Windows是64位的,所以這不是問題。但是,如果可執行文件被編譯爲32位,並且IMAGE_FILE_LARGE_ADDRESS_AWARE
,則限制應爲3 GB,對不對?當可執行文件是64位時,它會更大,也許64 GB(但如果安裝的RAM更少,則可能會發生交換)。
所以我的問題是,我如何獲得進程的可用內存?
請定義可用內存。您的進程可以使用64位系統上的完整4GB地址空間。它能夠分配當前未保留的所有空間,給予或帶走。無論如何,你將如何處理這些信息。 –
我試圖澄清問題 –
所以這是你想要的地址空間量。它可能是2,3或4.非常不可能是3.您現在不會發現許多使用/ 3gb開關引導的32位系統。 –