近似空闲存储(堆)大小的 C++ 程序

Ric*_*ard 4 c++ memory heap-memory

我应该编写一个不会崩溃并且可以近似于空闲存储(堆内存)大小的程序。提示是

提示:使用循环一次分配 1000000 个字节,并将 1 添加到 unsigned long long 计数器;然后当分配失败时,打印计数器乘以 1000000.0。

这是我第一次接触编程和 C++,所以我完全迷失了开始。free store的大小不是取决于电脑的ram吗?我怎么可能以字节为单位计算大内存的大小?

另外什么是无符号长长?

Ran*_*ook 5

通过连续分配块直到分配失败来测量 RAM 当然是一种方法,但这不是专业程序员解决问题的方式。等同于通过读取整个内容并逐个计算字节来确定文件的大小(应该使用stat(), fstat(), 或fseek()andftell()代替)。

更好的方法是询问操作系统有多少可用的 RAM。毕竟,它肯定知道这个问题的答案。

在 Linux 上,您将使用sysinfo()API。阅读示例。

在 Windows 上,您将使用GetPhysicallyInstalledSystemMemory(). 在这里阅读。

在 MacOS 上,您将使用sysctl()带有CTL_HWHW_MEMSIZE选择器的API 。

此 SO 页面包含三个主要平台的综合示例。

还有一件事:在具有虚拟内存的系统上,您尝试测量的空闲存储可能更接近磁盘上系统交换文件的大小,而不是安装的物理 RAM 量,并且系统上其他进程的状态将也会影响通过连续分配测量的值。