Staramy się dowiedzieć, ile pamięci fizycznej jest zainstalowane na komputerze z systemem Mac OS X. Znaleźliśmy BSD function sysctl(). Problem polega na tym, że funkcja zwraca wartość 32-bitową, ale niektóre komputery Mac mogą adresować do 32 GB, które nie mieszczą się w 32-bitowej wartości. (W rzeczywistości nawet 4 GB nie mieści się w 32-bitowej wartości.) Czy jest dostępne inne API w systemie OS X (10.4 lub nowszym), które da nam te informacje?Określanie fizycznego rozmiaru pamięci programowo na OSX
Odpowiedz
Czy próbowałeś googlować?
Wydaje się to być odpowiedź: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html
sysctl() działa, wystarczy pobrać hw.memsize zamiast hw.physmem. hw.memsize da ci uint64_t, więc nie ma 32-bitowego problemu.
Od Obtaining a Mac’s System Profiler data from shell:
Zastosowanie system_profiler
.
Odpowiedź brzmi: użyj sysctl, aby pobrać hw.memsize, co zasugerowano w poprzedniej odpowiedzi. Oto rzeczywisty kod do robienia tego.
#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);
Niewielka korekta: sizeof (int64) powinna być sizeof (int64_t) –
Ewentualnie można dodać dane z vm_statistics_data_t dostać całkowitej pamięci
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);
Otrzymuję ostrzeżenie tutaj: "Niejawna deklaracja funkcji" host_statistics "jest niepoprawna w C99", jak to naprawić? –
#include
Dzięki @valexa, ale to nie działa, nawet po dodaniu Kernel.framework, pokaże błąd na linii mówiąc, że nie istnieje. Ostrzeżenie nie jest błędem, więc ma trochę wspólnego z przestarzałym kodem. Być może masz pomysł? –
- 1. Określanie rozmiaru czcionki użytkownika
- 2. Indywidualne określanie rozmiaru w Matplotlib?
- 3. Określanie wirtualnego rozmiaru procesu przy użyciu delphi
- 4. Określanie rozmiaru bajtów macierzy scipy.sparse?
- 5. ElasticSearch - Określanie maksymalnego rozmiaru odłamka
- 6. Zmiana rozmiaru UITableView programowo
- 7. Zmiana rozmiaru UIView programowo
- 8. Zmiana rozmiaru fizycznego ekranu Androida z terminala/powłoki
- 9. Określanie bieżącego rozmiaru obrazu przy użyciu ImageResizer.net
- 10. Określanie rozmiaru witryn/kolekcji witryn SharePoint
- 11. Określanie rozmiaru dokumentu przy użyciu Mongoida
- 12. Zmiana rozmiaru pliku PDF NSImage OSX
- 13. Jak programowo wygenerować plik PDF z dowolnego dokumentu na OSX?
- 14. Programowo chwytaj zrzuty ekranu w OSX
- 15. Określanie limitów pamięci za pomocą hadoop
- 16. Określanie minimalnej wersji OSX binarny został skompilowany dla
- 17. Określanie długości piksela ciąg w kakao (MAC OSX)
- 18. Zrozumienie fizycznego planu iskrzenia
- 19. Volume do dysku fizycznego
- 20. Czy dowolny system operacyjny pozwala na przenoszenie pamięci z jednego adresu do drugiego bez fizycznego kopiowania?
- 21. Zmiana rozmiaru ekranu systemowego programowo Android N
- 22. Automatyczne zmienianie rozmiaru widoku podrzędnego utworzonego programowo
- 23. Zmienianie rozmiaru okna wpf programowo w C#
- 24. Zmiana rozmiaru przycisku w iOS programowo
- 25. Określanie limitu rozmiaru tekstury maks./min. W systemie Android OpenGLES
- 26. Uzyskiwanie rozmiaru pamięci obiektu w PHP?
- 27. Emulacja fizycznego urządzenia USB Linux
- 28. Obraz ekranu przechwytywania w C++ na OSX
- 29. Zmiana rozmiaru pamięci współużytkowanej POSIX. Działający przykład:
- 30. Ustawianie rozmiaru kolejki komunikatów systemu V w systemie Mac OSX
ładny i łatwy do obsługi skryptów! Także jeśli potrzebujesz tylko pamięci: 'sysctl hw.memsize' lub' sysctl -a | grep mem' – TrinitronX
Uwaga: hw.physmem i hw.usermem zwrócą mniejsze wartości dla systemów powyżej [2 GB RAM] (http://superuser.com/questions/197059/mac-os-x-sysctl-get-total-and -free-memory-size # comment199969_197085) [muc.lists.FreeBSD.hackers Dyskusja] (https://groups.google.com/d/msg/muc.lists.freebsd.hackers/P58uQQcRiSo/1lAwPcOfsYIJ) Zobacz " Komentarze/usr/include/sys/sysctl.h' zawierają więcej informacji. – TrinitronX