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

C# 为什么GetSystemInfo().minimumApplicationAddress返回的数字大于GetSystemInfo().maximumApplicationAddress?,c#,memory,C#,Memory,我正在学习如何操作内存的教程,不管出于什么原因,下面的代码给出了65536表示最小地址,给出了-65537表示最大地址,这没有多大意义 我希望最大地址大于最小地址,否则将意味着没有地址 是一个链接到我下面的教程,以防有帮助 SYSTEM_INFO sys_info = new SYSTEM_INFO(); GetSystemInfo(out sys_info); IntPtr proc_min_address = sys_info.minimumApplicationAddress; IntP

我正在学习如何操作内存的教程,不管出于什么原因,下面的代码给出了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\u info.maximumApplicationAddress
根据平台类型进行更改:
任何CPU:0xfffeffff
x64:0x00007FFFFFFFF
x86:0x7ffefff

对long执行强制转换时,您正在强制转换0xfffeffff的4字节有符号值(int32),即-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);
    }
    

    我无法重现此问题,最小地址是65536,最大地址是140737488289791这可能是错误还是windows的安全锁?