我想在C#中調用Windows的'GetSystemInfo()
API函數以檢索maximumApplicationAddress
和minimumApplicationAddress
以掃描計算機的內存。GetSystemInfo()爲最大應用程序地址返回不同的值
我寫了一個簡單的程序,輸出這些值:
SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);
Console.WriteLine("Min Address: {0:X}", sys_info.minimumApplicationAddress.ToUInt64());
Console.WriteLine("Max Address: {0:X}", sys_info.maximumApplicationAddress.ToUInt64());
當我運行這個程序,調試器(使用啓動按鈕),就說明這一點:
Min Address: 10000
Max Address: 7FFEFFFF
但是,當我構建它,然後運行可執行文件,它顯示了這一點:
Min Address: 10000
Max Address: FFFEFFFF
Max Addr對我來說埃斯特有點陌生。你能解釋一下原因嗎?
第一個7FFEFFFF是2GB,第二個是4GB。根據[這](http://stackoverflow.com/questions/11891593/the-maximum-amount-of-memory-any-single-process-on-windows-can-address)它可能是這樣的:「32位的64位操作系統:2 GB,除非設置爲大的地址空間感知,在這種情況下4 GB。「 - 所以也許調試器正在使用非大地址感知代碼,但構建版本是? – Quantic
是的,你說得對。根據鏈接的問題,運行'editbin/LARGEADDRESSAWARE:NO Program.exe'使得構建的程序像調試器一樣行爲 – Ahmad