检查正在运行的程序中可用RAM的数量
问题描述:
在面试时,我的一位朋友被要求编写一个测量可用RAM数量的程序。预期的答案是以二进制搜索的方式使用malloc()
:分配越来越大的内存部分,直到获得失败消息,减少部分大小,并且总计分配的内存量。检查正在运行的程序中可用RAM的数量
我相信这种方法会测量虚拟内存的数量,而不是物理内存。但我对这件事很好奇。
有没有办法从程序中分辨出可用RAM的数量,而不使用exec(dmesg |grep -i memory)
?
答
要做到这一点的唯一方法是使用一些特定于操作系统的功能。使用malloc()是没用的,原因如下:
- 它测量虚拟内存
- 操作系统可能会对内存分配
- 分配更多的内存实际可用通常会降低每个进程帽平台稳定性的地步,“退一”的问题,提出的算法可能会无法正常工作
答
这是操作系统特定的,除非你想使自己的记忆,你应该收集来自OS等服务信息管理层
答
非常特定于操作系统,但对于Linux,有关系统内存的信息位于/ proc/meminfo中。您也可以使用sysctl接口(http://www.linuxjournal.com/article/2365)在C程序中获取这些数据。
答
使用malloc()只会告诉你多少内存可以分配给一个进程。这可能有一些原因,使其低于虚拟内存总量。例如,您可能有OS配额或每个进程的32位有限地址空间。
(而且,当然,虚拟内存> = RAM)
听起来像是不错的面试故事日常FTW。 – akarnokd 2009-06-26 10:35:58
这听起来像是一个问题,以测试受访者对内存管理的了解 - 虚拟内存等。 – sharptooth 2009-06-26 10:46:13
虽然这是一个不错的选择。它测试操作系统和内存管理知识以及创造力。人们可以在不了解内存管理的情况下提出解决方案。 – 2009-06-26 11:53:07