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 ?

Comment puis-je récupérer la mémoire système disponible en C sur différentes plates-formes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 13:16:15558parcourir

How Can I Retrieve Available System Memory in C   Across Different Platforms?

Récupération de la mémoire disponible dans C /g

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.

Systèmes de type UNIX (Linux, macOS, 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;
}

Windows

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;
}

Utilisation

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!

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