【发布时间】:2012-06-05 13:02:10
【问题描述】:
在 C++ 中,我如何检查我有多少可用 RAM?
我在 windows 上,但对 Unix 答案以及 windows 感兴趣。
【问题讨论】:
-
您是指系统可用的物理内存还是进程可用的虚拟内存?
-
这能回答你的问题吗? How to get available memory C++/g++?
标签: c++
在 C++ 中,我如何检查我有多少可用 RAM?
我在 windows 上,但对 Unix 答案以及 windows 感兴趣。
【问题讨论】:
标签: c++
Windows:GlobalMemoryStatusEx。 MSDN 页面有详细的 C 示例代码。
Linux:检查“/proc/meminfo”文件 (discussion)
OSX:查看这个 SO 线程 Determine physical mem size programmatically on OSX
不过,这个问题并不清楚。有物理内存,有虚拟内存,操作系统可以将一些未使用的页面交换到磁盘/其他存储。
如果您需要编写某种系统监视器,那么我的答案就可以了。
如果您需要确保所有 malloc()/new[] 调用都不会失败,那么只需捕获适当的异常或处理 NULL 结果。另一种选择是构建您自己的分配器,它在开始时获取一个大内存块并在那里分配较小的块。
编辑:回复评论
对 WinAPI 的 MapViewOfFile 和 CreateFileMapping 的调用会提供错误代码以排除致命情况。由于文件被映射到与您的进程数据共享的虚拟地址空间,您可以检查是否有足够数量的可用页面。即,如果您在 32 位系统上,您将无法一次将整个 8Gb 文件映射到内存(但您可以映射其较小的部分),但在 64 位系统上,映射的可能性足以满足当前的任何需求。
【讨论】: