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

时间:2009-06-26 10:26:42

标签: memory malloc

在求职面试中,我的一位朋友被要求编写一个测量可用内存量的程序。预期的答案是以二进制搜索方式使用malloc():分配更大和更大的内存部分,直到收到失败消息,减少部分大小,并总计分配的内存量。

我相信这种方法会衡量虚拟内存量,而不是物理内存量。但我对此事感到好奇。

有没有办法在不使用exec(dmesg |grep -i memory)的情况下告诉程序中的可用内存量?

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

执行此操作的唯一方法是使用某些特定于操作系统的功能。使用malloc()是没用的,原因有很多:

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

答案 2 :(得分:1)

这是特定于操作系统的,您应该从OS服务收集此类信息,除非您想要创建自己的内存管理层

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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