繁体   English   中英

为什么 GetSystemInfo().minimumApplicationAddress 返回的数字大于 GetSystemInfo().maximumApplicationAddress?

[英]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。

由于使用内存地址不会有任何负值,因此您可以更改为无符号值。

  • IntPtr 到 UIntPtr
  • 长到乌龙

    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.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM