使用C或C ++ API在Linux上获取总物理内存

时间:2017-01-14 16:50:11

标签: c++ linux memory

我计划创建跨平台库,以提供对系统配置信息(已安装的硬件,CPU型号等)的访问。

在寻找访问总内存的方式时("总计"我的意思是系统中安装的内存量,而不是系统可用的内存),我发现了一些问题。

在Windows中,此代码提供了正确的值:

#include <Windows.h>
....
uint64_t memory;
GetPhysicallyInstalledSystemMemory(&memory);

在OS X中,此代码提供了正确的值:

#include <sys/sysctl.h>
...
size_t memorySize;
sysctlbyname("hw.memsize",nullptr,&memorySize,nullptr,0);
int64_t memory;
sysctlbyname("hw.memsize",(void*)&memory,&memorySize,nullptr,0);

对于Linux(Ubuntu),获取内存信息的常用方法是解析 来自命令的信息&#34;免费&#34;或文件&#34; / proc / meminfo&#34;。问题是这些选项提供了可用于系统的内存,它与总内存很接近但不相同(与Windows功能类似的情况&#34; GlobalMemoryStatusEx&#34;)。

此外,我计划仅使用C或C ++ API收集所需信息,并且不希望使用File API解析文本。

我知道命令dmidecode,我可以在每个已安装的内存库中添加内存,但除了需要解析文本数据外,命令还需要root运行。

所以主要问题是,这里有选项吗?也许存在函数是在以后添加的并且不是很受欢迎(对于Windows,我发现了有关&#34; GetPhysicallyInstalledSystemMemory&#34;稍后功能的信息,因为它是在Windows Vista中引入的,并且大多数示例使用较旧的&#34; GlobalMemoryStatusEx&#34;。)

编辑:

问题没有重复,因为我描述了获得&#34;总计&#34;的具体问题。内存作为特定系统中安装的总内存。另外,我只使用可用的C或C ++ API明确指定可能解决方案的要求,而不是解析命令或文本文件的结果,如&#34; / proc / meminfo&#34;因为其他类似的问题没有设定这样的要求。

EDITED_2:

更改以反映C和C ++ API均适用

0 个答案:

没有答案