Мы пытаемся выяснить, сколько физической памяти установлено на компьютере под управлением Mac OS X. Мы нашли функцию BSD sysctl(). Проблема в том, что эта функция хочет вернуть 32-битное значение, но некоторые Mac могут адресовать до 32 ГБ, что не будет соответствовать 32-битовому значению. (На самом деле даже 4 ГБ не поместится в 32-битное значение.) Есть ли еще один API, доступный в OS X (10.4 или новее), который даст нам эту информацию?Определить размер физической памяти программным способом на OSX
ответ
Вы попробовали поиск по Google?
Это, кажется, ответ: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html
Sysctl() делает работу, вам просто нужно получить hw.memsize вместо hw.physmem. hw.memsize предоставит вам uint64_t, поэтому нет 32-разрядной проблемы.
От Obtaining a Mac’s System Profiler data from shell:
Использование system_profiler
.
Ответ заключается в использовании sysctl для получения hw.memsize, как было предложено в предыдущем ответе. Вот реальный код для этого.
#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);
Небольшая коррекция: sizeof (int64) должен быть sizeof (int64_t) –
В качестве альтернативы вы можете добавить данные из vm_statistics_data_t, чтобы получить общий объем памяти
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);
Я получаю предупреждение здесь: «Неявное объявление функции« host_statistics »недействительно в C99», как я могу это исправить? –
#include
Спасибо @valexa, но он не работает, даже с добавлением Kernel.framework, он покажет ошибку на строке, говорящей, что ее не существует. Предупреждение не является ошибкой, поэтому оно несколько отличается от устаревшего кода. Возможно, у вас есть идея? –
- 1. Как найти размер физической памяти в Java?
- 2. Размер массива на основе доступной физической памяти
- 3. Как можно физически определить размер физической оперативной памяти в Linux?
- 4. Как определить размер физической памяти из модуля ядра?
- 5. Определить swizzling программным способом (как в GLSL)
- 6. Как изменить размер изображения, добавленный программным способом
- 7. Как ОС знает реальный размер физической памяти?
- 8. Смещение физической памяти на Windows
- 9. HttpContext.Cache Использование физической памяти
- 10. Ограничение физической памяти на процесс
- 11. Почему я могу указать размер кучи, превышающий размер физической памяти?
- 12. Как настроить системную громкость программным способом (в OSX и Windows)
- 13. Определить размер таблицы страниц для виртуальной памяти
- 14. Get Datasources программным способом
- 15. Изменение вида программным способом
- 16. Оценка количества доступной физической памяти
- 17. Добавление UICollectionViewLayout программным способом
- 18. Сканирование всей физической памяти
- 19. Сгенерировать свойства программным способом
- 20. Манипулирование форм программным способом
- 21. Выравнивать представления программным способом
- 22. Разбить метку на несколько строк программным способом
- 23. Как блокировать теги программным способом на wordpress?
- 24. Drupal7: Изменить разрешение на использование программным способом
- 25. CreateDibSection на диске вместо физической памяти
- 26. Как получить доступный размер виртуальной и физической памяти в Mono?
- 27. Поведение распределения физической памяти и виртуальной памяти
- 28. Изменение памяти на OSX
- 29. Как гарантируется выравнивание физической памяти?
- 30. Различные виды представления физической памяти?
Nice & легко для сценариев! Также, если вы хотите только память: 'sysctl hw.memsize' или' sysctl -a | grep mem' – TrinitronX
Примечание: hw.physmem и hw.usermem вернут меньшие значения для систем с [RAM 2 ГБ] (http://superuser.com/questions/197059/mac-os-x-sysctl-get-total-and -free-memory-size # comment199969_197085) [muc.lists.FreeBSD.hackers Discussion] (https://groups.google.com/d/msg/muc.lists.freebsd.hackers/P58uQQcRiSo/1lAwPcOfsYIJ) См. раздел '/usr/include/sys/sysctl.h' для получения дополнительной информации. – TrinitronX