我正在处理一台安装了8GB内存的机器,试图编程确定机器上安装了多少内存。我已经尝试使用sysctlbyname()来获取安装的内存量,但它似乎仅限于返回一个带符号的32位整数。
uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
m_totalMemory = total;
无论传递给sysctlbyname的类型是什么,上述代码始终在total变量中返回2147483648。我已经在IOKit和IORegistryExplorer中寻找另一种确定安装内存的方法,但目前为止没有发现任何东西。我在IORegistryExplorer中找到了IODeviceTree:/memory,但那里没有大小字段。我也没有在IO Registry的其他地方找到任何信息。有没有通过IOKit访问此信息的方法,或者让sysctlbyname返回超过32位有符号整数的方法?