如何在Linux下以编程方式确定物理内存大小?

在命令行中,可以使用“free”实用程序和“cat / proc / meminfo”来查找。 在Linux中编程式地查找物理内存大小的方法有以下几种:

  1. 用户空间应用程序
  2. 内核模块

哪些API调用可用?

#include <unistd.h> long long physical_mem_bytes = (long long) sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE); 

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

在编程上,Linux不会告诉你实际的物理尺寸。 相反,您应该阅读SMBIOS的这些信息,例如,

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

这将给你如下的结果(从一个有4个RAM存储区的盒子中,只有2个被安装):

 Maximum Memory modulee 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 modulee Installed Size: 2048 MB Size: No modulee Installed 

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

要检查你的计算,运行

 fgrep -e 'MemTotal:' /proc/meminfo 

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

 MemTotal: 3988616 kB 

cat /proc/meminfo

特别是从内存中,我得到了这个结果从什么Jared说sudo dmidecode -t memory那里你可以读取每个单独的内存插槽的规格,所以你会看到像2048MB的东西,在我的情况下,我有2这些是4GB,尽管我非PAE内核只显示约3.3GB和所有其他应用程序不会说真正的物理内存,只有dmidecode,thx!