Я хотел бы знать, как получить размер моей памяти через C++ (в Windows 7).Получить размер системной памяти
ответ
Вы хотите использовать GlobalMemoryStatusEx, который возвращает MEMORYSTATUSEX. Поле, которое вы хотите, называется ullTotalPhys.
В Windows:
typedef BOOL (WINAPI *PGMSE)(LPMEMORYSTATUSEX);
PGMSE pGMSE = (PGMSE) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), TEXT("GlobalMemoryStatusEx"));
if (pGMSE != 0)
{
MEMORYSTATUSEX mi;
memset(&mi, 0, sizeof(MEMORYSTATUSEX));
mi.dwLength = sizeof(MEMORYSTATUSEX);
if (pGMSE(&mi) == TRUE)
os << "RAM: " << mi.ullTotalPhys/1048576 << "MB";
else
pGMSE = 0;
}
if (pGMSE == 0)
{
MEMORYSTATUS mi;
memset(&mi, 0, sizeof(MEMORYSTATUS));
mi.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mi);
os << "RAM: " << mi.dwTotalPhys/1048576 << "MB";
}
В Linux:
Read /proc/meminfo
.
Использовать GetPhysicallyInstalledSystemMemory
для извлечения ОЗУ физически установлено на компьютере.
(.. Обратите внимание, что для этого требуется Windows Vista с пакетом обновления 1 или более поздней версии функция не доступна на более ранних версиях операционной системы Windows)
remarks на MSDN говорят:
GetPhysicallyInstalledSystemMemory функция извлекает количество физически установленной ОЗУ из таблиц прошивки компьютера SMBIOS . Это может отличаться от суммы сообщила функция GlobalMemoryStatusEx , который устанавливает ullTotalPhys члена структуры MEMORYSTATUSEX к количеству физической памяти, доступна для операционной системы использовать. Объем доступной памяти к операционной системе может быть меньше , чем объем памяти физически , установленной на компьютере, потому что BIOS и некоторые драйверы могут резервировать памяти, ввода/вывода областей для отображенные в памяти устройства, что делает память недоступна операционной системе .
Объем физической памяти извлеченной с помощью GetPhysicallyInstalledSystemMemory функции должен быть равен или больше, чем количество, указанного с помощью функции GlobalMemoryStatusEx;, если это меньше, данные SMBIOS искажены , и функция не работает с ERROR_INVALID_DATA. Неправильные данные SMBIOS могут указывать на проблему с компьютером пользователя .
Это означает, что вы также хотели бы посмотреть на GlobalMemoryStatusEx
.
Хорошо, ребята! Я нашел решение, делая это как то [Режим гуру по]:
#define _WIN32_WINNT 0x0501 // I misunderstand that
#include <windows.h>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex); // I misunderstand that
GlobalMemoryStatusEx (&statex);
cout << "Physical RAM => " << (float)statex.ullTotalPhys/(1024*1024*1024)<< endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Я должен был определить _WIN32_WINNT 0x0501, но я не знаю, почему [режим гуру выключен].
Если кто-нибудь может объяснить мне, что он делает, и почему он не работает без него.
Еще одна вещь, что это такое:
statex.dwLength = sizeof (statex);
0x501
является версия WindowsXP, т.е. MEMORYSTATUSEX
структуры не поддерживается некоторыми более старыми версиями Windows. Вероятно, ваш windef.h указывает на более низкий WINVER
, чем 0x5XX
.
- 1. Как получить размер доступной системной памяти?
- 2. GPU - отображение системной памяти
- 3. исключения Системной памяти на цикл
- 4. Стабильный JVM, но увеличение системной памяти
- 5. Как получить размер памяти переменной?
- 6. Разработка ОС - резервирование системной памяти при запуске
- 7. наибольший размер распределения карты памяти?
- 8. CreateFileMapping, MapViewOfFile, как избежать поддержки системной памяти
- 9. -Xmx атрибут и доступная корреляция системной памяти
- 10. MariaDB Innodb_buffer_pool_size на основе системной памяти
- 11. WPF RichTextBox вкладка выбор питания системной памяти!
- 12. PHP Разрешенный размер памяти Размер памяти исчерпан
- 13. Рассчитанный свободный размер отличается от системной статистики
- 14. Размер кучи Java Размер памяти
- 15. Процесс Java уничтожается после исчерпания системной памяти. Зачем?
- 16. Как получить размер выделенной памяти динамически?
- 17. Как получить размер памяти ArrayCollection в Flex
- 18. Как получить размер памяти динамического массива?
- 19. Как получить размер коллекции в памяти?
- 20. получить время под размер памяти ubuntu
- 21. получить размер DataTable или ArrayList в памяти
- 22. Как получить размер оперативной памяти, загрузчик
- 23. Получить размер памяти с INT 12
- 24. WPF - получить размер UIElement в памяти?
- 25. Как получить доступ к памяти системной памяти/буферу кадра в программе Java?
- 26. Как получить размер (размер памяти) изображения в iphone?
- 27. Размер динамически распределенной памяти
- 28. Размер DLFileEntry в памяти
- 29. PHP Разрешенный размер памяти
- 30. Сохраните указатель на объект lisp в памяти системной области
Зачем вам это нужно знать? –