Lorsque vous traitez des applications gourmandes en mémoire, il est crucial d'allouer des tampons en fonction de la mémoire disponible. Cela garantit que le traitement peut se poursuivre sans dépasser les limites de mémoire et provoquer une instabilité du système. Dans un environnement multiplateforme, il est nécessaire d'utiliser une méthode indépendante de la plate-forme pour obtenir les informations sur la mémoire disponible.
Systèmes de type Unix
Systèmes d'exploitation de type Unix fournir la fonction sysconf, qui nous permet de récupérer les informations de configuration du système. Pour obtenir la mémoire totale du système, nous pouvons utiliser :
#include <unistd.h> unsigned long long getTotalSystemMemory() { long pages = sysconf(_SC_PHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; }
Windows
Sous Windows, la fonction GlobalMemoryStatusEx peut être utilisée pour récupérer les informations sur la mémoire. Le code suivant montre comment l'utiliser :
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
Implémentation multiplateforme
Pour créer une solution multiplateforme, nous pouvons utiliser la compilation conditionnelle pour sélectionner le fonction appropriée en fonction du système d'exploitation :
#ifdef __unix__ unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #elif _WIN32 unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; } #endif
Cela fournira un moyen cohérent de récupérer la mémoire disponible pour votre application sur différents systèmes d'exploitation. systèmes.
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!