Question

Je travaille sur une machine qui dispose de 8 Go de mémoire installée et je suis en train de déterminer par programme la quantité de mémoire installée dans la machine. Je l'ai déjà essayé à l'aide sysctlbyname () pour obtenir la quantité de mémoire installée, mais il semble se limiter à retourner un entier signé 32 bits.

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

Le code ci-dessus, peu importe quel type est passé à sysctlbyname, retourne toujours 2147483648 dans la variable totale. J'ai cherché par IOKit et IORegistryExplorer pour une autre voie de déterminer la mémoire installée, mais suis venu avec rien à ce jour. J'ai trouvé IODeviceTree: / mémoire IORegistryExplorer, mais là-bas pour la taille il n'y a pas de champ. Je ne trouve rien nulle part ailleurs dans le IO Registre non plus. Y at-il un moyen d'accéder à ces informations via IOKit, ou un moyen de faire revenir sysctlbyname plus d'un entier signé 32 bits?

Était-ce utile?

La solution

Vous pouvez utiliser sysctl() et interroger HW_MEMSIZE.This renvoie la taille de la mémoire comme un entier de 64 bits, au lieu de la valeur par défaut entier de 32 bits.

de href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/sysctl.3.html" donne les détails.

Autres conseils

La manière simple:

[[NSProcessInfo processInfo] physicalMemory]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top