它们总是4kB的时间吗?
在粉碎中总结所有Sizes
有多大?
答案 0 :(得分:1)
粒度存在内存页面大小。它可能是4096或8192字节(甚至是其他东西,不确定)。通常,您可以使用sysconf(_SC_PAGESIZE)
确定它,或者使用预定义的PAGE_SIZE
宏(如果可用)。
所有Size
条目总和的上限是整个虚拟地址空间大小,即32位系统的2^32
字节和64位的2^64
字节。
当然,真实情况总是在这个限制之下,至少因为内核占据了地址空间的某些部分而且没有在/proc/<pid>/smaps
中报告。
答案 1 :(得分:1)
smaps 包含进程使用的内存页面,如 proc 手册页中所述:
因此Rss块的总大小不大于主机的RAM。 虚拟内存的总大小受CPU数据总线大小的限制。但是在64位CPU上并没有使用所有64行,因此可以从 cpuinfo 获得可寻址空间的实际大小:
cat /proc/cpuinfo | grep 'address'
输出类似
的内容address sizes : 39 bits physical, 48 bits virtual
其中&#39;物理&#39;是支持的物理RAM大小和虚拟&#39;是用于寻址虚拟内存的最大位。因此,2 ^ 48是CPU的最大可寻址空间,也是任何进程的最大虚拟内存总和。
大小是RAM页面大小的倍数。
可以使用
检查RAM页面大小getconf PAGESIZE
通常是4096。