[英]GetSystemInfo() returns different values for max application address
[英]Why does GetSystemInfo().minimumApplicationAddress return a number greater than GetSystemInfo().maximumApplicationAddress?
我正在学习有关如何操作内存的教程,无论出于何种原因,以下代码为 minimumAddress 提供了 65536,为最大地址提供了 -65537,这没有多大意义。
我希望最大地址大于最小值,否则将意味着没有地址。
这是我正在关注的教程的链接,以防万一。
SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);
IntPtr proc_min_address = sys_info.minimumApplicationAddress;
IntPtr proc_max_address = sys_info.maximumApplicationAddress;
// saving the values as long ints so I won't have to do a lot of casts later
long proc_min_address_l = (long)proc_min_address;
long proc_max_address_l = (long)proc_max_address;
Console.WriteLine("Min Addr: {0}, Max Addr: {1}", proc_min_address_l, proc_max_address_l);
sys_info.maximumApplicationAddress
根据平台类型更改:
任何 CPU:0xffffeffff
x64:0x00007ffffffffff
x86:0x7ffeffff
在进行 long 类型转换时,您正在转换 4 字节的带符号值 (int32),即 0xfffeffff,即 -65537。
由于使用内存地址不会有任何负值,因此您可以更改为无符号值。
public struct SYSTEM_INFO { ... public UIntPtr minimumApplicationAddress; public UIntPtr maximumApplicationAddress; ... } public static void Main() { SYSTEM_INFO sys_info = new SYSTEM_INFO(); GetSystemInfo(out sys_info); UIntPtr proc_min_address = sys_info.minimumApplicationAddress; UIntPtr proc_max_address = sys_info.maximumApplicationAddress; // saving the values as ulong ints so I won't have to do a lot of casts later ulong proc_min_address_l = (ulong)proc_min_address; ulong proc_max_address_l = (ulong)proc_max_address; Console.WriteLine("Min Addr: {0}, Max Addr: {1}", proc_min_address_l, proc_max_address_l); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.