【问题标题】:C++ checking available ram?C ++检查可用的内存?
【发布时间】:2012-06-05 13:02:10
【问题描述】:

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

我在 windows 上,但对 Unix 答案以及 windows 感兴趣。

【问题讨论】:

标签: c++


【解决方案1】:

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 位系统上,映射的可能性足以满足当前的任何需求。

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多