在求职面试中,我的一位朋友被要求编写一个测量可用内存量的程序。预期的答案是以二进制搜索方式使用malloc()
:分配更大和更大的内存部分,直到收到失败消息,减少部分大小,并总计分配的内存量。
我相信这种方法会衡量虚拟内存量,而不是物理内存量。但我对此事感到好奇。
有没有办法在不使用exec(dmesg |grep -i memory)
的情况下告诉程序中的可用内存量?
答案 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程序中获取此数据。