Программно получить объем оперативной памяти, установленной в OS X

StackOverflow https://stackoverflow.com/questions/1396691

  •  22-09-2019
  •  | 
  •  

Вопрос

Я работаю на машине, на которой установлено 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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top