Определите физический размер памяти программно в OSX - PullRequest
7 голосов
/ 25 февраля 2009

Мы пытаемся выяснить, сколько физической памяти установлено на машине с Mac OS X. Мы нашли функцию BSD sysctl (). Проблема в том, что эта функция хочет вернуть 32-битное значение, но некоторые компьютеры Mac могут адресовать до 32 ГБ, которые не помещаются в 32-битное значение. (На самом деле даже 4 ГБ не уместятся в 32-разрядное значение.) Есть ли другой API, доступный в OS X (10.4 или более поздней версии), который даст нам эту информацию?

Ответы [ 4 ]

12 голосов
/ 15 декабря 2009

Ответ - использовать 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);
5 голосов
/ 25 февраля 2009

Вы пробовали гуглить?

Это, кажется, ответ: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html

sysctl () работает, вам просто нужно получить hw.memsize вместо hw.physmem. hw.memsize даст вам uint64_t, так что нет проблем с 32 битами.

4 голосов
/ 04 мая 2009
0 голосов
/ 31 октября 2012

В качестве альтернативы вы можете добавить данные из 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...