2

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

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

有没有办法在不使用的情况下从程序中知道可用 RAM 的数量exec(dmesg |grep -i memory)

4

5 回答 5

5

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

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

于 2009-06-26T10:30:22.293 回答
3

这样做的唯一方法是使用一些特定于操作系统的功能。由于多种原因,使用 malloc() 是无用的:

  • 它测量虚拟内存
  • 操作系统很可能对内存分配有每个进程的上限
  • 分配比物理可用更多的内存通常会使平台稳定性降低到问题中建议的“返回一个”算法可能不起作用的程度
于 2009-06-26T10:34:18.653 回答
1

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

于 2009-06-26T10:40:58.793 回答
1

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

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

于 2009-06-26T11:13:00.993 回答
0

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

于 2009-06-26T10:49:32.273 回答