Pregunta

Estoy trabajando en una máquina que tiene 8 gigas de memoria instalada y yo estoy tratando de determinar mediante programación la cantidad de memoria instalada en la máquina. Ya he intentado usar sysctlbyname () para obtener la cantidad de memoria instalada, sin embargo, parece estar limitada a devolver un entero de 32 bits.

uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
     m_totalMemory = total;

El código anterior, no importa qué tipo se pasa a sysctlbyname, siempre devuelve 2147483648 en la variable total. He estado buscando a través IOKit y IORegistryExplorer otra ruta de determinar memoria instalada, pero han llegado a nada hasta el momento. He encontrado IODeviceTree: / memoria en IORegistryExplorer, pero no hay campo en el que hay para el tamaño. No encuentro nada en ningún otro lugar en el Registro IO tampoco. ¿Hay una manera de acceder a esta información a través de IOKit, o una manera de hacer que el retorno sysctlbyname más de un entero de 32 bits?

¿Fue útil?

Solución

Puede utilizar sysctl() y consulta HW_MEMSIZE.This devuelve el tamaño de la memoria como un entero de 64 bits, en lugar del número entero predeterminado de 32 bits.

El href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/sysctl.3.html" rel="nofollow noreferrer"> página da los detalles.

Otros consejos

La forma más fácil:

[[NSProcessInfo processInfo] physicalMemory]
scroll top