假设我想缓存某些计算,但是激发它将它同步到磁盘会产生I / O惩罚,而不仅仅是违反缓存的整个目的。
这意味着,我需要能够找到剩余多少物理RAM(包括缓存内存,假设我可以将其推出并允许一些松弛应该缓冲增加)。我查看了/ proc / meminfo并知道如何阅读它。我不太确定如何结合数字来获得我想要的东西。代码没有必要,一旦我知道我需要什么,我就可以自己编码。
我不会在它需要运行的盒子上有根,但它应该相当安静。没有大量的磁盘I / O,没有其他进程在爆发中声称有很多内存。操作系统是一个相当新的Linux,开启了过度使用。这显然需要在不触发OOM杀手的情况下工作。
数字不需要精确到兆字节,我认为它大致在1到7个gib范围内,具体取决于盒子,但接近大约100 mb会很棒。
如果估计值偏小,那绝对是可取的。
答案 0 :(得分:3)
Unices具有标准sysconf()
功能(OpenGroups man page,Linux 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;