linux ps vsz malloc,认真分析下进程的内存,说说VSZ、RSS、PSS

进程占用的内存可以有以下这些类型:自身的代码

共享库的代码

运行过程分配的堆和栈

通过mmap映射的磁盘文件内容

1. 虚拟内存与物理内存

这里要区分两个概念,虚拟内存和物理内存。物理内存对于进程来说是透明的,进程直接操作的是虚拟内存。而数据和代码是存放在真实的物理内存的,之所以进程在虚拟内存中寻址可以获取数据,是由于虚拟内存与物理内存存在着映射关系。

当我们的进程向系统申请内存时,比方通过malloc方法,得到的其实是虚拟内存,假如进程没有使用这些虚拟内存,那么它们是不会和物理内存关联起来的。比方假如我们malloc 10MB的内存,但是只用了一个byte的,那么进程实际得到的只有一个页的物理内存,也就是4096byte的内存空间。当物理内存被换出到磁盘(swap out),虚拟内存对应的地址还是有效的,假如寻址到这些地址,对应的物理内存就会被换入到内存(swap in)。

虚拟内存是连续的,而物理内存却不肯定。

2. 共享的内存

从进程自身的角度看,虚拟内存是进程独立的,所有内存都是私有的,包括自身代码、共享库、堆栈等,它不用关心共享内存的事情。但实际上在物理内存的层面,很多东西是可以共享的,比方共享的代码库(.so)、自身代码甚至是自身运行时私有的堆栈内存。

2.1 共享库

同一个共享库的代码在物理内存中只会存在一份,这块内存会映射到不同进程的虚拟内存中,对各个进程来说,就像是自己私有的内存一样,而对于系统来说,则是节省了内存的资源。

2.2 进程自身的代码

同样,同一份代码运

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值