在一次工作面试中,我的一个朋友被要求编写一个程序来测量可用 RAM 的数量。预期的答案是以malloc()
二进制搜索方式使用:分配越来越大的内存部分,直到收到失败消息,减小部分大小,并对分配的内存量求和。
我相信这种方法将测量虚拟内存的数量,而不是物理内存。但我对这件事感到好奇。
有没有办法在不使用的情况下从程序中知道可用 RAM 的数量exec(dmesg |grep -i memory)
?
你是对的: malloc() 不区分物理内存或虚拟内存。事实上,这就是虚拟内存的全部意义所在:让这些细节与程序无关。
您可以找到,但它是特定于操作系统的。例如,Linux。
这样做的唯一方法是使用一些特定于操作系统的功能。由于多种原因,使用 malloc() 是无用的:
这是特定于操作系统的,除非您想创建自己的内存管理层,否则您应该从操作系统服务中收集此类信息
使用 malloc() 只会告诉您可以为单个进程分配多少内存。这可能是低于虚拟内存总量的原因。例如,您可能有操作系统配额或每进程 32 位限制的地址空间。
(当然,虚拟内存 >= RAM)
非常特定于操作系统,但对于 Linux,有关系统内存的信息位于 /proc/meminfo。您也可以使用 sysctl 接口 ( http://www.linuxjournal.com/article/2365 ) 在 C 程序中获取这些数据。