[英]Determine physical mem size programmatically on OSX
我們試圖找出在運行 Mac OS X 的機器上安裝了多少物理 memory。我們發現了 BSD function sysctl()。 問題是這個 function 想要返回 32 位值,但某些 Mac 能夠處理高達 32 GB 的地址,這不適合 32 位值。 (實際上,即使 4 GB 也不適合 32 位值。)OS X(10.4 或更高版本)上是否有另一個 API 可以為我們提供此信息?
答案是使用 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);
你試過谷歌搜索嗎?
這似乎是答案: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html
sysctl() 確實有效,您只需要獲取 hw.memsize 而不是 hw.physmem。 hw.memsize 會給你一個 uint64_t,所以沒有 32 位問題。
或者,您可以添加來自 vm_statistics_data_t 的數據以獲得總 memory
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.