C++检查可用的内存

C++ checking available ram?

本文关键字:内存 检查 C++      更新时间:2023-10-16

>C++如何检查我有多少可用 RAM?

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

Windows: GlobalMemoryStatusEx.MSDN 页面包含详细的 C 示例代码。

Linux:检查"/proc/meminfo"文件(讨论)

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

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

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

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

编辑:回答评论

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