在内存分配必须适应可用系统资源的情况下,需要确定可用于的内存量运行时的应用程序。本文探讨了在 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中文网其他相关文章!