Memory 检查正在运行的程序中可用RAM的数量

Memory 检查正在运行的程序中可用RAM的数量,memory,malloc,Memory,Malloc,在一次工作面试中,我的一位朋友被要求编写一个程序来测量可用RAM的数量。预期的答案是以二进制搜索方式使用malloc():分配越来越大的内存部分,直到收到故障消息,减少部分大小,并对分配的内存量求和 我相信这种方法将测量虚拟内存的数量,而不是物理内存的数量。但我对这件事很好奇 是否有一种方法可以在不使用exec(dmesg | grep-i memory)的情况下从程序中判断可用RAM的数量?您是对的:malloc()不区分物理内存和虚拟内存。事实上,这就是虚拟内存的全部意义:使这些细节与程序无

在一次工作面试中,我的一位朋友被要求编写一个程序来测量可用RAM的数量。预期的答案是以二进制搜索方式使用
malloc()
:分配越来越大的内存部分,直到收到故障消息,减少部分大小,并对分配的内存量求和

我相信这种方法将测量虚拟内存的数量,而不是物理内存的数量。但我对这件事很好奇

是否有一种方法可以在不使用exec(dmesg | grep-i memory)的情况下从程序中判断可用RAM的数量?

您是对的:malloc()不区分物理内存和虚拟内存。事实上,这就是虚拟内存的全部意义:使这些细节与程序无关


您可以找到,但它是特定于操作系统的。例如,.

实现这一点的唯一方法是使用一些特定于操作系统的功能。使用malloc()是无用的,原因有很多:

  • 它测量虚拟内存
  • 操作系统可能在内存分配上有每个进程的上限
  • 分配比实际可用内存多得多的内存通常会降低平台的稳定性,以至于问题中建议的“返回一个”算法可能无法工作

这是特定于操作系统的,您应该从操作系统服务收集此类信息,除非您希望使自己的内存管理层非常特定于操作系统,但对于Linux,有关系统内存的信息位于/proc/meminfo中。您也可以使用sysctl接口()在C程序中获取此数据。

使用malloc()只能告诉您可以为单个进程分配多少内存。这可能是低于虚拟内存总量的原因。例如,您可能有操作系统配额或每个进程32位有限的地址空间


(当然,虚拟内存>=RAM)

听起来像是每日FTW的一个不错的求职面试故事。听起来像是一个测试受访者的内存管理知识的问题——虚拟内存等。不过这是一个不错的问题。它测试操作系统和内存管理知识以及创造力。你可以在不了解内存管理的情况下提出解决方案。谢谢。procfs-OS依赖中有一些很好的信息,但是非常有用。