Maison >développement back-end >C++ >Comment obtenir la mémoire système disponible dans C/g ?

Comment obtenir la mémoire système disponible dans C/g ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 17:07:11796parcourir

How to Get Available System Memory in C  /g  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn