我正在尝试弄清楚所有不同内存分类的含义,例如 VIRT、RES、SHR 和 DATA。虽然我大致了解前 3 个,但我不知道 DATA 列的含义,除了它的官方定义 DATA = 数据 + 堆栈大小 (kb)。这与其他 3 种内存分类有何关系?
答案1
根据https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/:
该字段由内核计算为两个变量之间的差值:total_vm(与 VIRT 和 shared_vm 相同)。shared_vm 在某种程度上类似于 SHR,因为它共享可共享内存的定义,但它不只计算常驻部分,而是包含所有寻址文件支持内存的总和。此外,计数是在映射级别而不是页面级别完成的,因此对于修改后的私有文件支持内存,shared_vm 并不像 SHR 那样精妙。因此,shared_vm 是象限 2、3 和 4 的总和。这意味着 total_vm 和 shared_vm 之间的差值恰好是象限 1 的内容。
DATA 列包含保留的私有匿名内存量。根据定义,私有匿名内存是特定于程序并保存其数据的内存。它只能通过以写时复制方式分叉来共享。它包括(但不限于)堆栈和堆2。此列不包含有关程序实际使用了多少内存的任何信息,它只是告诉我们程序保留了一些内存,但是这些内存可能会长时间不动。
答案2
从手册页中:
s: DATA -- Data+Stack size (kb)
The amount of physical memory devoted to other than executable code, also known as
the ’data resident set’ size or DRS.
换句话说,内存用于存储程序(而非可执行程序)的变量数据
就像内存中的数组一样,它们是可变的数据。
也stack size
正如字面意思,是系统用于执行特定程序的堆栈大小。堆栈是系统存储程序/进程调用的函数的回溯的地方。请记住,这个指标表示堆栈大小,而不是堆栈本身。
有关您提到的其他内存列的更多信息这里
答案3
来自手册页这里。
The amount of private memory **reserved** by a process. It is also
known as the Data Resident Set or DRS. Such memory may not yet
be mapped to physical memory (RES) but will always be included in
the virtual memory (VIRT) amount.