1

假设我想缓存某些计算,但将其同步到磁盘会导致 I/O 损失,这将超过缓存的整个目的。

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

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

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

如果估计在较小的方面犯错,那肯定会更好。

4

3 回答 3

4

Unices 具有标准sysconf()功能(OpenGroups 手册页Linux 手册页)。

使用此函数,您可以获得总物理内存:

unsigned long long ps = sysconf(_SC_PAGESIZE);
unsigned long long pn = sysconf(_SC_AVPHYS_PAGES);
unsigned long long availMem = ps * pn;
于 2012-12-14T18:38:40.223 回答
0

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

于 2012-12-14T21:58:02.317 回答
-1

对我来说,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;
于 2015-02-10T11:39:11.937 回答