我应该编写一个不会崩溃并且可以估计空闲存储(堆内存)大小的程序。提示是
Hint: Use a loop to allocate, say, 1000000 bytes at a time and add 1 to an unsigned long long counter; then when the allocation fails, print the counter times 1000000.0.
这是我第一次接触编程和 C++,所以我完全不知所措。免费商店的大小不取决于计算机的内存吗?我怎么可能以字节为单位计算那个大内存的大小?
还有什么是unsigned long long?
最佳答案
通过连续分配 block 直到分配失败来测量 RAM 当然是一种方法,但这不是专业程序员解决问题的方法。这相当于通过读取整个文件并逐个计算字节来确定文件的大小(应该使用 stat()
、fstat()
或fseek()
和 ftell()
代替。
更好的方法是询问操作系统有多少 RAM 可用。毕竟,它肯定知道这个问题的答案。
在 Linux 上,您将使用 sysinfo()
API。阅读this举个例子。
在 Windows 上,您将使用 GetPhysicallyInstalledSystemMemory()
。了解一下 here .
在 MacOS 上,您可以使用 sysctl()
API,以及 CTL_HW
和 HW_MEMSIZE
选择器。
This SO page具有针对三大平台的综合示例。
还有一件事:在具有虚拟内存的系统上,您尝试测量的空闲存储可能更接近于磁盘上系统交换文件的大小,而不是安装的物理 RAM 的数量,以及磁盘上其他进程的状态该系统还将影响连续分配所衡量的值(value)。
关于近似空闲存储(堆)大小的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359978/