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?

Foi útil?

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]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top