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

标签 c++ memory heap-memory

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

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_HWHW_MEMSIZE 选择器。

This SO page具有针对三大平台的综合示例。

还有一件事:在具有虚拟内存的系统上,您尝试测量的空闲存储可能更接近于磁盘上系统交换文件的大小,而不是安装的物理 RAM 的数量,以及磁盘上其他进程的状态该系统还将影响连续分配所衡量的值(value)。

关于近似空闲存储(堆)大小的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359978/

相关文章:

c++ - 为什么 boost 正则表达式用完了堆栈空间?

c# - 使用基于 tcp 的命令在 C++ 应用程序中启动函数

C++段错误(核心转储)和使用结构

c++ - 我正在尝试在函数中使用新内存新堆内存,但它给出了一个错误

java - YARN hadoop错误java堆空间

c++ - std::initializer_list 和 std::make_shared: 参数太多...预期 3 提供 0

c - 在以下情况下,哪个更好? fread() 还是 mmap()?

php - 如何确定变量的内存占用(大小)?

memory - 如何根据内存压力使 make/ninja 限制并行性?

c++ - 我可以通过将指向堆栈变量的指针传递给 C++ 中的函数来得到指向意外位置的指针吗?