4

在 C++ 中,我将如何检查我有多少可用 RAM?

我在 Windows 上,但对 Unix 答案和 Windows 感兴趣。

4

1 回答 1

7

Windows:GlobalMemoryStatusEx。MSDN 页面有详细的 C 示例代码。

Linux:检查“/proc/meminfo”文件(讨论

OSX:请参阅此 SO 线程在 OSX 上以编程方式确定物理内存大小

然而,这个问题并不明确。有物理内存,有虚拟内存,操作系统有能力将一些未使用的页面交换到磁盘/其他存储。

如果您需要编写某种系统监视器,那么我的回答就可以了。

如果您需要确保所有 malloc()/new[] 调用都不会失败,那么只需捕获适当的异常或处理 NULL 结果。另一种选择是构建您自己的分配器,它在开始时获得一个大内存块并在那里分配较小的块。

编辑:回答评论

对 WinAPI 的 MapViewOfFile 和 CreateFileMapping 的调用提供了排除致命情况的错误代码。由于文件被映射到与您的进程数据共享的虚拟地址空间,您可以检查是否有足够数量的可用页面。即,如果您在 32 位系统上,您将无法一次将整个 8Gb 文件映射到内存(但您可以映射其较小的部分),但在 64 位系统上,映射的可能性足以满足当前的任何需求。

于 2012-05-31T09:27:32.860 回答