如何找出linux下的免费物理内存量(c)

时间:2012-12-14 17:34:56

标签: linux memory-management

假设我想缓存某些计算,但是激发它将它同步到磁盘会产生I / O惩罚,而不仅仅是违反缓存的整个目的。

这意味着,我需要能够找到剩余多少物理RAM(包括缓存内存,假设我可以将其推出并允许一些松弛应该缓冲增加)。我查看了/ proc / meminfo并知道如何阅读它。我不太确定如何结合数字来获得我想要的东西。代码没有必要,一旦我知道我需要什么,我就可以自己编码。

我不会在它需要运行的盒子上有根,但它应该相当安静。没有大量的磁盘I / O,没有其他进程在爆发中声称有很多内存。操作系统是一个相当新的Linux,开启了过度使用。这显然需要在不触发OOM杀手的情况下工作。

数字不需要精确到兆字节,我认为它大致在1到7个gib范围内,具体取决于盒子,但接近大约100 mb会很棒。

如果估计值偏小,那绝对是可取的。

3 个答案:

答案 0 :(得分:3)

Unices具有标准sysconf()功能(OpenGroups man pageLinux man page)。

使用此功能,您可以获得总物理内存:

unsigned long long ps = sysconf(_SC_PAGESIZE);
unsigned long long pn = sysconf(_SC_AVPHYS_PAGES);
unsigned long long availMem = ps * pn;

答案 1 :(得分:0)

作为H2CO3答案的替代方案,您可以从/ proc / meminfo中读取。

答案 2 :(得分:0)

对我来说,statfs运作良好。

#include <sys/vfs.h>

struct statfs buf;
size_t available_mem;
if ( statfs( "/", &buf ) == -1 ) 
    available_mem = 0;
else 
    available_mem = buf.f_bsize * buf.f_bfree;