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

问题描述:

在面试时,我的一位朋友被要求编写一个测量可用RAM数量的程序。预期的答案是以二进制搜索的方式使用malloc():分配越来越大的内存部分,直到获得失败消息,减少部分大小,并且总计分配的内存量。检查正在运行的程序中可用RAM的数量

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

有没有办法从程序中分辨出可用RAM的数量,而不使用exec(dmesg |grep -i memory)

+1

听起来像是不错的面试故事日常FTW。 – akarnokd 2009-06-26 10:35:58

+0

这听起来像是一个问题,以测试受访者对内存管理的了解 - 虚拟内存等。 – sharptooth 2009-06-26 10:46:13

+0

虽然这是一个不错的选择。它测试操作系统和内存管理知识以及创造力。人们可以在不了解内存管理的情况下提出解决方案。 – 2009-06-26 11:53:07

你是对的:malloc()不区分物理或虚拟内存。事实上,这就是虚拟内存的重点:使这些细节与程序无关。

你可以找出,但它是操作系统特定的。例如,Linux

要做到这一点的唯一方法是使用一些特定于操作系统的功能。使用malloc()是没用的,原因如下:

  • 它测量虚拟内存
  • 操作系统可能会对内存分配
  • 分配更多的内存实际可用通常会降低每个进程帽平台稳定性的地步,“退一”的问题,提出的算法可能会无法正常工作

这是操作系统特定的,除非你想使自己的记忆,你应该收集来自OS等服务信息管理层

非常特定于操作系统,但对于Linux,有关系统内存的信息位于/ proc/meminfo中。您也可以使用sysctl接口(http://www.linuxjournal.com/article/2365)在C程序中获取这些数据。

使用malloc()只会告诉你多少内存可以分配给一个进程。这可能有一些原因,使其低于虚拟内存总量。例如,您可能有OS配额或每个进程的32位有限地址空间。

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