如何在Linux中以编程方式确定物理RAM大小?

时间:2009-11-23 17:01:59

标签: linux memory linux-kernel

在命令行上可以使用'free'实用程序和'cat / proc / meminfo'找到它。 通过以下方式以编程方式从Linux中找出物理RAM大小的不同方法是什么:

  1. 用户空间应用
  2. 内核模块
  3. 可以使用哪些API调用?

4 个答案:

答案 0 :(得分:4)

#include <unistd.h>

long long physical_mem_bytes = (long long) sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);

除了命令行ulimit之外,我不知道为单个进程找到最大内存的方法。

答案 1 :(得分:1)

以编程方式,Linux不会告诉你实际的物理尺寸。相反,您应该从SMBIOS读取此信息,例如

sudo dmidecode -t memory | fgrep -ie 'size:'

这将给出如下结果(来自一个有4个RAM库的盒子,只安装了2个):

Maximum Memory Module Size: 16384 MB
Maximum Total Memory Size: 65536 MB
Installed Size: 2048 MB (Single-bank Connection)
Enabled Size: 2048 MB (Single-bank Connection)
Installed Size: Not Installed
Enabled Size: Not Installed
Installed Size: 2048 MB (Single-bank Connection)
Enabled Size: 2048 MB (Single-bank Connection)
Installed Size: Not Installed
Enabled Size: Not Installed
Size: 2048 MB
Size: No Module Installed
Size: 2048 MB
Size: No Module Installed

添加报告的大小(或Enabled Size s,但有些BIOS经验不报告)获得(在这种情况下)4096 MB。 (自动解析和算术的代码的额外分数,但你可能几乎可靠地做到这一点。)

要检查您的计算,请运行

fgrep -e 'MemTotal:' /proc/meminfo

/proc/meminfo报告的值不应超过您从dmidecode计算的值。在这种情况下,凭经验我得到

MemTotal:        3988616 kB

答案 2 :(得分:-1)

cat /proc/meminfo

答案 3 :(得分:-1)

特别是从记忆中,我从Jare​​d所说的那里得到了这个结果 sudo dmidecode -t memory 在那里你可以阅读每个内存插槽的规格,所以你会读到类似2048MB的东西,在我的情况下我有2个是4gb,尽管我的非PAE内核只显示大约3.3gb而所有其他应用程序都不会说真正的物理记忆,只有dmidecode,thx!