2009-02-24 6 views
6

Nous essayons de connaître la quantité de mémoire physique installée sur une machine exécutant Mac OS X. Nous avons trouvé la fonction BSD sysctl(). Le problème est que cette fonction veut renvoyer une valeur de 32 bits mais certains Mac peuvent adresser jusqu'à 32 Go qui ne rentreront pas dans une valeur de 32 bits. (En fait, même 4 Go ne rentrent pas dans une valeur de 32 bits.) Y a-t-il une autre API disponible sur OS X (10.4 ou ultérieur) qui nous donnera cette information?Déterminez la taille de la mémoire physique par programme sous OSX

Répondre

4
+1

Nice & facile pour les scripts! Aussi, si vous voulez seulement de la mémoire: 'sysctl hw.memsize' ou' sysctl -a | grep mem' – TrinitronX

+0

Note: hw.physmem et hw.usermem retourneront des valeurs plus petites pour les systèmes de plus de [2GB RAM] (http://superuser.com/questions/197059/mac-os-x-sysctl-get-total-and -free-memory-size # comment199969_197085) [discussion muc.lists.FreeBSD.hackers] (https://groups.google.com/d/msg/muc.lists.freebsd.hackers/P58uQQcRiSo/1lAwPcOfsYIJ) Voir '/usr/include/sys/sysctl.h' commentaires pour plus d'informations. – TrinitronX

11

La réponse est d'utiliser sysctl pour obtenir hw.memsize comme cela a été suggéré dans une réponse précédente. Voici le code réel pour le faire.

#include <sys/types.h> 
#include <sys/sysctl.h> 

... 

    int mib[2]; 
    int64_t physical_memory; 
    size_t length; 

    // Get the Physical memory size 
    mib[0] = CTL_HW; 
    mib[1] = HW_MEMSIZE; 
    length = sizeof(int64_t); 
    sysctl(mib, 2, &physical_memory, &length, NULL, 0); 
+0

Une correction mineure: sizeof (int64) devrait être sizeof (int64_t) –

0

Sinon, vous pouvez ajouter les données de vm_statistics_data_t pour obtenir la mémoire totale

vm_statistics_data_t vm_stat; 
int count = HOST_VM_INFO_COUNT; 
kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (integer_t*)&vm_stat, (mach_msg_type_number_t*)&count); 
+0

Je reçois un avertissement ici: "Déclaration implicite de la fonction 'host_statistics' invalide en C99", comment puis-je résoudre ce problème? –

+0

#include valexa

+0

Merci @valexa, mais ça ne marche pas, même avec l'ajout du Kernel.framework, il va afficher une erreur sur la ligne disant qu'elle n'existe pas. L'avertissement n'est pas une erreur, il a donc quelque chose à voir avec du code obsolète. Peut-être avez-vous une idée? –

Questions connexes