我试图深入理解OS Linux上的虚拟内存管理.
我真的不明白操作系统如何确定进程的VM大小.
我知道32位x86操作系统可以提供高达3 GB的vm地址空间......它总是如此吗?
在我的情况下,我有大约110 MB物理内存和32位Linux,我的主进程有一个约660 MB的虚拟机地址空间.但是,物理内存中只有50 MB(我的进程的RSS),因此我的物理内存不足.其余的是免费的,几乎整个页面缓存使用.这似乎是一种正常行为.
如果我检查/ proc/my_process_PID/smap,则有几个8 MB的匿名VMA.
我实际的问题是,我需要在代码中的其它附加10 MB的malloc,但不幸的是OOM杀手杀死我的过程(外的内存)......我想有对在VM没有更多的免费可用的页面堆,不是吗?某处是否存在巨大的内存泄漏?
为什么操作系统不会扩展我的进程vm大小呢?
有关信息,vm大小是无限的:ulimit -v:无限制