簡體   English   中英

在 OSX 上以編程方式確定物理內存大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM