以编程方式获取OS X上安装的RAM量

时间:2009-09-08 22:35:07

标签: c++ macos memory iokit

我正在安装一台安装了8 GB内存的机器,我正在尝试以编程方式确定机器中安装了多少内存。我已经尝试使用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注册表中找到任何其他地方。有没有办法通过IOKit访问这些信息,或者使sysctlbyname返回超过32位有符号整数的方法?

2 个答案:

答案 0 :(得分:8)

您可以使用sysctl()并查询HW_MEMSIZE。这会将内存大小返回为64位整数,而不是默认的32位整数。

man page提供了详细信息。

答案 1 :(得分:7)

简单方法:

[[NSProcessInfo processInfo] physicalMemory]