C++检查可用的内存
C++ checking available ram?
>C++如何检查我有多少可用 RAM?
我在Windows上,但对Unix答案和Windows感兴趣。
Windows: GlobalMemoryStatusEx.MSDN 页面包含详细的 C 示例代码。
Linux:检查"/proc/meminfo"文件(讨论)
OSX:请参阅此 SO 线程 在 OSX 上以编程方式确定物理内存大小
然而,这个问题并不清楚。有物理内存,有虚拟内存,有操作系统将一些未使用的页面交换到磁盘/其他存储的能力。
如果您需要编写某种系统监视器,那么我的答案就可以了。
如果您需要确保所有 malloc()/new[] 调用都不会失败,那么只需捕获适当的异常或处理 NULL 结果。另一种选择是构建自己的分配器,该分配器在开始时获得一个大的内存块,并在那里分配较小的块。
编辑:回答评论
对WinAPI的MapViewOfFile和CreateFileMapping的调用提供错误代码以排除致命情况。由于文件映射到与进程数据共享的虚拟地址空间,因此您可以检查是否有足够数量的可用页。也就是说,如果你使用的是32位系统,你将无法一次将整个8Gb文件映射到内存(但你可以映射其较小的部分),但在64位系统上,映射的可能性足以满足任何当前的需求。
相关文章:
- 检查nullptr是否100%保护内存布局不受segfault影响
- 使用 valgrind 检查我的链表暗示中的内存泄漏,让我"肯定丢失:1 个块中有 40 个字节"
- 如何使用 Malloc 调试来检查本机内存泄漏?
- 如何在c/c++中检查两个任意内存范围是否重叠
- 如何检查C++智能指针内存分配是否成功?
- 投射空指针以检查内存对齐情况
- 有没有办法检查内存缓存是否已重新启动?
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- 如何检查是否可以在C 中使用某个内存地址
- 检查destructor是否正在破坏所有动态内存
- 在编译时检查特征类型保存的数据在内存中是否连续
- 我可以检查共享内存中是否存在地址
- 如何检查指针是否指向正确对齐的内存位置
- 使用GDB并检查Data的内存布局
- Malloc内存检查是否连续
- 嵌入的Linux PPC32动态内存检查工具
- 与实际内存内容相比,GDB 内存检查输出偏差 8 个字节
- 如何对守护程序进行内存检查
- 双指针内存检查,我们是否需要单独删除两者
- 运行valgrind/其他内存检查通过eclipse luna在Windows-8 64位