C# 为什么GetSystemInfo().minimumApplicationAddress返回的数字大于GetSystemInfo().maximumApplicationAddress?
我正在学习如何操作内存的教程,不管出于什么原因,下面的代码给出了65536表示最小地址,给出了-65537表示最大地址,这没有多大意义 我希望最大地址大于最小地址,否则将意味着没有地址 是一个链接到我下面的教程,以防有帮助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
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 由于使用内存地址,因此不会有任何负值,因此可以更改为无符号值。
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的安全锁?