Me gustaría saber cómo puedo obtener el tamaño de mi memoria RAM a través de C++ (en Windows 7).Obtener el tamaño del sistema RAM
Respuesta
Desea utilizar el GlobalMemoryStatusEx que devuelve un MEMORYSTATUSEX. El campo que desea se llama ullTotalPhys.
En 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";
}
En Linux:
Leer /proc/meminfo
.
Utilice GetPhysicallyInstalledSystemMemory
para recuperar la cantidad de RAM que es físicamente instalada en la computadora.
(.. Tenga en cuenta que esto requiere Windows Vista SP1 o posterior La función no está disponible en las versiones anteriores del sistema operativo Windows)
El remarks en MSDN dicen:
La función GetPhysicallyInstalledSystemMemory recupera la cantidad de RAM físicamente instalada de las tablas de firmware SMBIOS de la computadora . esto puede diferir de la cantidad informado por la función GlobalMemoryStatusEx , que establece el ullTotalPhys miembro de la estructura MEMORYSTATUSEX a la cantidad de memoria física que está disponible para el sistema operativo utilizar. La cantidad de memoria disponible para el sistema operativo puede ser menor que la cantidad de memoria física instalado en el equipo porque el BIOS y algunos conductores pueden reservar memoria como I regiones de E/S para dispositivos asignados a la memoria, haciendo que la memoria no disponible para el sistema operativo y aplicaciones.
La cantidad de memoria física recuperado por la función GetPhysicallyInstalledSystemMemory debe ser igual o mayor que la cantidad informado por la función GlobalMemoryStatusEx; si es es menor, los datos de SMBIOS están mal formados y la función falla con ERROR_INVALID_DATA. Los datos mal formados de SMBIOS pueden indicar un problema con la computadora del usuario .
Eso significa que también debería consultar GlobalMemoryStatusEx
.
Bien, muchachos! He encontrado la solución al hacer esto al igual que [Modo de gurú en]:
#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;
}
tuviera que definir 0x0501 _WIN32_WINNT, pero yo no sé por qué [Modo gurú está apagado].
Si alguien pudiera explicarme qué está haciendo y por qué no funciona sin él.
Una cosa más, lo que es:
statex.dwLength = sizeof (statex);
El 0x501
es la versión de Windows XP, es decir, la estructura MEMORYSTATUSEX
no es compatible con algunas versiones anteriores de Windows. Su windef.h probablemente apunte a un WINVER
inferior a 0x5XX
.
- 1. ¿Cómo obtener el tamaño de RAM total de un dispositivo?
- 2. Obtener el tamaño de bloque del sistema en Java
- 3. Obtener el tamaño de la memoria del sistema operativo Java
- 4. ¿Cómo obtener el tamaño de la memoria del sistema disponible?
- 5. ¿Cómo obtener tamaño de Ram y tamaño de disco duro con Java?
- 6. Tamaño del bloque del sistema de archivos
- 7. obtener el servidor ram con php
- 8. C# obtener el tamaño de la memoria caché del archivo del sistema
- 9. Obtener fuente predeterminada del sistema
- 10. Ordenando datos más grandes que el tamaño de RAM
- 11. Obtener el tamaño del puntero en C
- 12. Obtener el tamaño del monitor en python
- 13. Cómo obtener el tamaño del archivo HttpPostedFileBase
- 14. iOS Foundation: tamaño de fuente del sistema
- 15. disco RAM de escritura directa, o almacenamiento en caché masivo del sistema de archivos?
- 16. Obtener el nombre del sistema operativo del cliente
- 17. ¿Cómo cambiar el tamaño de RAM del emulador de Android desde la línea de comando?
- 18. ¿Qué pasará, cuando el tamaño del db de mongodb sea mayor que la RAM?
- 19. Cómo obtener la configuración regional del sistema y el idioma del sistema en cocoa
- 20. DMA transfer RAM-to-RAM
- 21. Obtener RAM total/libre desde dentro de Python
- 22. Obtener el tamaño del archivo en el disco
- 23. ¿Cómo obtener información del sistema en PHP?
- 24. Cómo obtener los colores del sistema Android
- 25. Cómo obtener estadísticas del sistema con node.js
- 26. Obtener la hora actual del sistema?
- 27. Obtener la hora actual del sistema
- 28. Obtener el tamaño de ZipInputStream
- 29. obtener claves y valores en el símbolo del sistema
- 30. Objeto proxy para obtener el tiempo del sistema
¿Por qué querrías saber eso? –