Linux下进程占用内存了解

转自:https://zhuanlan.zhihu.com/p/470315089

1.介绍

通过以下命令:
cat /proc/pid/status

即可查看所占用内存情况,C++中通过getpid()函数即可打印进程的pid,类型为pid_t,

  • VSZ:Virtual Memory Size(虚拟内存大小)。进程占用的全部地址空间,共享库,预分配内存,交换分区等都包含在里面。因此,它远远大于实际的占用的内存空间。
  • RSS:Resident Set Size(驻留集大小), 实际占用的物理内存,它包含共享库,但不包含在交换分区的空间。随着程序的运行,RSS也会跟着增长,VSZ将是它的上限。
  • PSS:Proportional Set Size(比例集大小), 也是实际分配的物理内存,与RSS的区别是,它以平分的方式来计算共享库的大小(共享库 / 进程个数), RSS会把共享库的大小全部计算进来。
  • USS:Unique Set Size, 进程的私有内存(独自使用的库,堆等空间),不包含共享的内存空间。
  • ANON: Anonymous memory,匿名内存 —— 没有文件关联的内存页面。Linux会自动映射文件到内存,读取的文件后,会自动缓存到内存。如果,应用程序只是使用mmap(MAP_ANONYMOUS) 分配一些内存页面没有文件关联,就称为“匿名内存”。
  • Dirty: dirty pages , 脏页大小 —— 还没有写回到硬盘的缓存页面。
  • VIRT: 同VSZ。RES: 同RSS。

2.代码

可参考: https://blog.csdn.net/y_m_h/article/details/121756642

https://www.cnblogs.com/cxjchen/archive/2013/03/30/2990548.html

  • VmPeak是占用虚拟内存的峰值,也就是最高的一个值,而且是虚拟内存,所以有时候会比物理内存要大。PS和TOP指令都是利用VmPeak计算内存占用的。
  • VmRSS是进程所占用的实际物理内存。

 

posted @ 2023-01-15 20:14  lypbendlf  阅读(728)  评论(0编辑  收藏  举报