Frage

Ich arbeite an einer Maschine, die 8 GB Speicher installiert ist und ich versuche, programmatisch zu bestimmen, wie viel Speicher in der Maschine installiert ist. Ich habe schon versucht, mit sysctlbyname (), um die Größe des installierten Speichers zu erhalten, aber es ist auf der Rückkehr einen 32-Bit-Integer begrenzt zu sein scheint.

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

Der obige Code, egal, welche Art zu sysctlbyname geben wird, gibt immer 2147483648 in den gesamten variablen. Ich habe für eine andere Route durch IOKit und IORegistryExplorer Suche der installierten Speicher zu bestimmen, aber bisher nichts einfallen lassen. Ich habe IODeviceTree gefunden: / Speicher in IORegistryExplorer, aber es gibt kein Feld in ihm für Größe. Ich finde nichts irgendwo sonst in der IO-Registrierung entweder. Gibt es eine Möglichkeit, um Zugriff auf diese Informationen über IOKit oder eine Art und Weise sysctlbyname Rückkehr mehr als eine 32-Bit-Ganzzahl mit Vorzeichen zu machen?

War es hilfreich?

Lösung

Sie können sysctl() und Abfrage HW_MEMSIZE.This gibt die Speichergröße als 64-Bit-Integer, anstelle der Standard-32-Bit-Integer verwenden.

Das Manpage gibt die Details.

Andere Tipps

Der einfache Weg:

[[NSProcessInfo processInfo] physicalMemory]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top