题
我的工作有8场音乐会安装的内存的机器上,我试图以编程方式确定多少内存安装在机器。我已经使用sysctlbyname()来获得的安装的内存量已经尝试,但是它似乎限于返回一个符号的32位整数。
uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
m_totalMemory = total;
在上面的代码,无论传递给sysctlbyname什么类型,总是返回在总变量2147483648。我经历过由于IOKit和IORegistryExplorer寻找确定安装的内存的另一条路线,但都拿出了什么至今。我发现IODeviceTree:在IORegistryExplorer /内存,但没有在现场为有规模。我没有找到任何其他地方的IO注册表要么。有没有一种方法来访问通过这一由于IOKit信息,或一种方法,使sysctlbyname回报超过32位有符号整数?
解决方案
可以使用sysctl()
和查询HW_MEMSIZE
.This返回的存储器大小为64位的整数,而不是默认的32位整数。
其他提示
在简单的方法:
[[NSProcessInfo processInfo] physicalMemory]
不隶属于 StackOverflow