在記憶體分配必須適應可用系統資源的情況下,需要確定可用於的記憶體量運行時的應用程式。本文探討了在 Windows、macOS、Linux 和 AIX 上獨立於平台檢索可用記憶體的方法。
sysconf 函數提供了標準化的方式取得系統設定參數,包括記憶體資訊。下面的程式碼使用 sysconf 查詢總實體記憶體:
#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 上,GlobalMemoryStatusEx 函數提供有關記憶體使用情況的詳細信息,包括總實體記憶體:
#include <windows.h> unsigned long long getTotalSystemMemory() { MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx(&status); return status.ullTotalPhys; }
要在您的應用程式中使用此信息,您可以定義一個跨平台返回可用內存的函數:
#ifdef WIN32 unsigned long long getTotalSystemMemory() { return GlobalMemoryStatusEx(); } #else unsigned long long getTotalSystemMemory() { return sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); } #endif
然後,您可以根據可以記憶體分配緩衝區:
void allocateBuffers() { unsigned long long availableMemory = getTotalSystemMemory(); // Allocate buffers according to `availableMemory` }
請注意,虛擬記憶體與實體記憶體的概念可能因平台而異和作業系統,因此必須為每個目標系統使用正確的功能。
以上是如何跨不同平台檢索可用的 C 系統記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!