Dalam senario di mana peruntukan memori mesti menyesuaikan diri dengan sumber sistem yang tersedia, terdapat keperluan untuk menentukan jumlah memori yang tersedia untuk aplikasi semasa runtime. Artikel ini meneroka kaedah untuk mendapatkan semula memori yang tersedia tanpa platform pada Windows, macOS, Linux dan AIX.
Fungsi sysconf menyediakan cara piawai untuk mendapatkan parameter konfigurasi sistem, termasuk maklumat memori. Kod di bawah menggunakan sysconf untuk menanyakan jumlah memori fizikal:
#include <unistd.h> unsigned long long getTotalSystemMemory() { long pages = sysconf(_SC_PHYS_PAGES); long page_size = sysconf(_SC_PAGE_SIZE); return pages * page_size; }
Pada Windows, fungsi GlobalMemoryStatusEx menyediakan maklumat terperinci tentang penggunaan memori, termasuk jumlah memori fizikal:
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
Untuk menggunakan maklumat ini dalam aplikasi anda, anda boleh mentakrifkan merentas platform fungsi yang mengembalikan memori yang tersedia:
#ifdef WIN32 unsigned long long getTotalSystemMemory() { return GlobalMemoryStatusEx(); } #else unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #endif
Kemudian, anda boleh memperuntukkan penimbal berdasarkan memori yang tersedia:
void allocateBuffers() { unsigned long long availableMemory = getTotalSystemMemory(); // Allocate buffers according to `availableMemory` }
Perhatikan bahawa konsep maya berbanding memori fizikal mungkin berbeza antara platform dan sistem pengendalian, jadi adalah penting untuk menggunakan fungsi yang betul untuk setiap sistem sasaran.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Memori Sistem Tersedia dalam C Merentasi Platform Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!