/ proc/mem中有很多字段:我知道我不能只使用"MemFree",因为实际上缓存了大量内存.所以问题是,我如何计算可用内存量?
假设:
如果你说系统配置没有交换空间,那么可以通过添加/ proc/meminfo中的"MemFree","Buffers"和"Cached"值来计算可用内存量.
这正是命令'free -m'在' - /+ buffers/cache'行中的'free'下显示的内容.
在Python中,我将按如下方式实现:
with open('/proc/meminfo', 'rt') as f:
vals = {}
for i in f.read().splitlines():
try:
name, val = i.split(':')
vals[name.strip()] = int(val.split()[0])
except:
pass
memfree = vals['MemFree'] + vals['Buffers'] + vals['Cached']
Run Code Online (Sandbox Code Playgroud)
这将给出以千字节为单位的值.
正如其他人所说,malloc不太可能永远返回null.Linux将进行全面分配,当您开始使用真正无法找到的页面时,OOM杀手将会开始.
使用卢克源!
free.c ——“free”命令行实用程序
sysinfo.c的源代码——请参阅方法 meminfo() 以获取如何读入 /proc/meminfo 的示例。
虽然读取 /proc 非常简单,但能够预测 malloc 是否会失败却并不容易。正如其他人提到的问题,例如过度使用、混乱的问题。标准的方法是尝试分配你需要的东西,如果你不能让它优雅地失败或者用更少的东西工作。
如果你有足够的时间,这个系列的文章值得一读:每个程序员都应该了解的内存知识。