5

我正在一台安装了 8 gigs 内存的机器上工作,我正在尝试以编程方式确定机器中安装了多少内存。我已经尝试使用 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 寻找另一种确定已安装内存的方法,但到目前为止还没有找到任何结果。我在 IORegistryExplorer 中找到了 IODeviceTree:/memory,但其中没有大小字段。我也没有在 IO Registry 的其他任何地方找到任何东西。有没有办法通过 IOKit 访问这些信息,或者有办法让 sysctlbyname 返回超过 32 位有符号整数?

4

2 回答 2

8

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

手册页提供了详细信息。

于 2009-09-08T22:44:28.753 回答
7

简单的方法:

[[NSProcessInfo processInfo] physicalMemory]
于 2009-09-08T22:38:54.210 回答