Domanda

Sto lavorando su una macchina che ha 8 giga di memoria installata e sto cercando di determinare a livello di codice la quantità di memoria installata nella macchina. Ho già tentato con sysctlbyname () per ottenere la quantità di memoria installata, comunque sembra essere limitato a restituire un segno a 32 bit integer.

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

Il codice di cui sopra, non importa quale tipo viene passato a sysctlbyname, torna sempre 2147483648 nella variabile totale. Ho cercato attraverso IOKit e IORegistryExplorer un altro percorso di determinare memoria installata, ma sono venuto su con niente finora. Ho trovato IODeviceTree: / memoria nel IORegistryExplorer, ma non c'è campo in là per dimensioni. Io non sto trovando nulla di qualsiasi altra parte del Registro di sistema IO sia. C'è un modo per accedere a queste informazioni tramite IOKit, o un modo per rendere sysctlbyname restituire più di un intero con segno a 32 bit?

È stato utile?

Soluzione

È possibile utilizzare sysctl() e interrogare HW_MEMSIZE.This restituisce la dimensione della memoria come un intero a 64 bit, invece che il numero intero di default a 32 bit.

Il href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/sysctl.3.html" rel="nofollow fornisce i dettagli.

Altri suggerimenti

Il modo più semplice:

[[NSProcessInfo processInfo] physicalMemory]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top