Maison >développement back-end >C++ >Comment puis-je récupérer la mémoire système disponible en C sur différentes plates-formes ?
Dans les scénarios où l'allocation de mémoire doit s'adapter aux ressources système disponibles, il est nécessaire de déterminer la quantité de mémoire disponible pour un l'application au moment de l'exécution. Cet article explore les méthodes de récupération indépendante de la plate-forme de la mémoire disponible sous Windows, macOS, Linux et AIX.
La fonction sysconf fournit un manière standardisée d'obtenir les paramètres de configuration du système, y compris les informations sur la mémoire. Le code ci-dessous utilise sysconf pour interroger la mémoire physique totale :
#include <unistd.h> unsigned long long getTotalSystemMemory() { long pages = sysconf(_SC_PHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; }
Sous Windows, la fonction GlobalMemoryStatusEx fournit des informations détaillées sur l'utilisation de la mémoire, y compris la mémoire physique totale :
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
Pour utiliser ces informations dans votre application, vous pouvez définir une fonction multiplateforme qui renvoie les informations disponibles mémoire :
#ifdef WIN32 unsigned long long getTotalSystemMemory() { return GlobalMemoryStatusEx(); } #else unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #endif
Ensuite, vous pouvez allouer des tampons en fonction de la mémoire disponible :
void allocateBuffers() { unsigned long long availableMemory = getTotalSystemMemory(); // Allocate buffers according to `availableMemory` }
Notez que le concept de mémoire virtuelle par rapport à la mémoire physique peut varier selon les plates-formes et les systèmes d'exploitation, donc il est essentiel d'utiliser les bonnes fonctions pour chaque système cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!