Obtenir de la mémoire disponible en C/g
Dans les applications modernes, il est crucial d'optimiser l'utilisation de la mémoire pour améliorer les performances et la stabilité. Pour allouer efficacement les tampons en fonction de la mémoire disponible, les développeurs doivent savoir comment récupérer ces informations. Cet article explore les méthodes indépendantes de la plate-forme pour obtenir la mémoire disponible dans C /g.
Systèmes d'exploitation de type UNIX
Les systèmes de type UNIX fournissent la fonction sysconf pour accéder au système informations de configuration. En passant _SC_PHYS_PAGES et _SC_PAGE_SIZE, les développeurs peuvent récupérer respectivement le nombre de pages physiques et la taille de la page. La multiplication de ces valeurs ensemble fournit la mémoire totale du système.
#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 fournit des informations sur l'utilisation de la mémoire du système. En définissant le membre dwLength sur la taille de la structure MEMORYSTATUSEX et en appelant la fonction, les développeurs peuvent accéder au membre ullTotalPhys, qui représente la mémoire physique totale.
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
Indépendance de la plate-forme
Pour rendre le code indépendant de la plate-forme, les développeurs peuvent utiliser les directives #ifdef pour définir des versions spécifiques au système du fonction getTotalSystemMemory. Par exemple, le code suivant combine les deux méthodes :
#ifdef __UNIX__ unsigned long long getTotalSystemMemory() { return ::getTotalSystemMemory(); } #elif defined(_WIN32) // Windows unsigned long long getTotalSystemMemory() { return ::getTotalSystemMemory(); } #else #error "Unsupported platform" #endif
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!