我们试图找出运行Mac OS X的机器上安装了多少物理内存。我们发现了BSD功能sysctl()。问题是这个函数想要返回一个32位的值,但是有些Mac能够处理高达32 GB的值,这些值不适合32位值。 (实际上即使4 GB也不适合32位值。)OS X(10.4或更高版本)上是否有另一个API可以提供这些信息?
答案 0 :(得分:11)
答案是使用sysctl获取hw.memsize,如前面的答案中所建议的那样。这是实现此目的的实际代码。
#include <sys/types.h>
#include <sys/sysctl.h>
...
int mib[2];
int64_t physical_memory;
size_t length;
// Get the Physical memory size
mib[0] = CTL_HW;
mib[1] = HW_MEMSIZE;
length = sizeof(int64_t);
sysctl(mib, 2, &physical_memory, &length, NULL, 0);
答案 1 :(得分:5)
你尝试使用谷歌搜索吗?
这似乎是答案: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html
sysctl()确实有效,你只需要获取hw.memsize而不是hw.physmem。 hw.memsize会给你一个uint64_t,所以没有32位问题。
答案 2 :(得分:4)
答案 3 :(得分:0)
或者,您可以添加vm_statistics_data_t中的数据以获取总内存
vm_statistics_data_t vm_stat;
int count = HOST_VM_INFO_COUNT;
kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (integer_t*)&vm_stat, (mach_msg_type_number_t*)&count);