Программно получить объем оперативной памяти, установленной в OS X
Вопрос
Я работаю на машине, на которой установлено 8 гигабайт памяти, и пытаюсь программно определить, сколько памяти установлено на машине.Я уже пытался использовать sysctlbyname(), чтобы получить объем установленной памяти, однако, похоже, он ограничен возвратом 32-битного целого числа со знаком.
uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
m_totalMemory = total;
Приведенный выше код, независимо от того, какой тип передается в sysctlbyname, всегда возвращает 2147483648 в переменной total.Я искал через IOKit и IORegistryExplorer другой способ определения установленной памяти, но пока ничего не нашел.Я нашел IODeviceTree:/memory в IORegistryExplorer, но там нет поля для размера.Больше нигде в реестре IO я ничего не нахожу.Есть ли способ получить доступ к этой информации через IOKit или способ заставить sysctlbyname возвращать более 32-битное целое число со знаком?
Решение
Вы можете использовать sysctl()
и запросить HW_MEMSIZE
.Это возвращает размер памяти в виде 64-битного целого числа вместо 32-битного целого числа по умолчанию.
А справочная страница дает подробности.
Другие советы
Простой способ:
[[NSProcessInfo processInfo] physicalMemory]