在C ++中,我如何检查我有多少RAM?
我在Windows上,但对Unix的答案以及windows感兴趣。
答案 0 :(得分:7)
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位系统上映射的可能性足以满足当前的任何需求。