婆罗门
精华
|
战斗力 鹅
|
回帖 0
注册时间 2009-11-16
|
发表于 2021-11-26 06:37
来自手机
|
显示全部楼层
Windows上虚拟内存分为物理内存和页面文件,程序可以要求系统reserve某段虚拟地址空间,并commit它(系统承诺提供相应数量的内存),之后实际去读写相应的内存(use,系统实际在物理内存或页面文件中存在对应的数据)。内存块还有私有和共享的属性,共享的内存也可能只有一个进程用,还有Copy-on-Write的情况
Windows提供的内存统计信息不行,没有提供不同进程共享的内存块的共享计数(或者说最大只能记到7),所以不能像Linux那样得到每个进程占用的私有虚拟内存+每块共享虚拟内存除以其共享进程数的结果之和
造成的结果就是Windows看不了每个进程实际commit和use的虚拟内存大小,只能看到进程在物理内存中的私有内存块的总大小(private working set),还有系统总的提交大小(commit charge)
还有一个问题是Windows的commit charge中,有一些内存是commit了但没有use的内存,这部分实际上并不需要有物理内存或者页面文件支撑,但是Windows中不允许commit charge超过物理内存+页面文件大小,而且没有办法获得总的use的内存大小;Linux在一些配置下支持over-commit
—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2 |
|