Ric*_*ard 4 c++ memory heap-memory
我应该编写一个不会崩溃并且可以近似于空闲存储(堆内存)大小的程序。提示是
提示:使用循环一次分配 1000000 个字节,并将 1 添加到 unsigned long long 计数器;然后当分配失败时,打印计数器乘以 1000000.0。
这是我第一次接触编程和 C++,所以我完全迷失了开始。free store的大小不是取决于电脑的ram吗?我怎么可能以字节为单位计算大内存的大小?
另外什么是无符号长长?
通过连续分配块直到分配失败来测量 RAM 当然是一种方法,但这不是专业程序员解决问题的方式。等同于通过读取整个内容并逐个计算字节来确定文件的大小(应该使用stat()
, fstat()
, 或fseek()
andftell()
代替)。
更好的方法是询问操作系统有多少可用的 RAM。毕竟,它肯定知道这个问题的答案。
在 Linux 上,您将使用sysinfo()
API。阅读此示例。
在 Windows 上,您将使用GetPhysicallyInstalledSystemMemory()
. 在这里阅读。
在 MacOS 上,您将使用sysctl()
带有CTL_HW
和HW_MEMSIZE
选择器的API 。
此 SO 页面包含三个主要平台的综合示例。
还有一件事:在具有虚拟内存的系统上,您尝试测量的空闲存储可能更接近磁盘上系统交换文件的大小,而不是安装的物理 RAM 量,并且系统上其他进程的状态将也会影响通过连续分配测量的值。