Obtenha programaticamente a quantidade de RAM instalada no OS X
Pergunta
Estou trabalhando em uma máquina com 8 shows de memória instalada e estou tentando determinar programaticamente quanta memória está instalada na máquina. Já tentei usar o sysctlbyName () para instalar a quantidade de memória, no entanto, parece ser limitado a devolver um número inteiro assinado de 32 bits.
uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
m_totalMemory = total;
O código acima, independentemente do tipo que seja passado para o SysctlbyName, sempre retorna 2147483648 na variável total. Eu tenho pesquisado no IOKIT e IOREGISTROEXPLORER por outra rota de determinação da memória instalada, mas não consegui nada até agora. Encontrei iodeviceTree:/memória no ioregistryExplorer, mas não há campo lá para o tamanho. Também não estou encontrando nada em nenhum outro lugar no registro de IO. Existe uma maneira de acessar essas informações via Iokit ou uma maneira de fazer com que o sysctlbyname retorne mais do que um número inteiro assinado de 32 bits?
Solução
Você pode usar sysctl()
e consulta HW_MEMSIZE
. Isso retorna o tamanho da memória como um número inteiro de 64 bits, em vez do número inteiro padrão de 32 bits.
o página de homem dá os detalhes.
Outras dicas
O caminho fácil:
[[NSProcessInfo processInfo] physicalMemory]