linux看虚拟内存和驻留内存,「OS」浅析虚拟内存、驻留内存与共享内存

使用过linux的同学,应该都用过top这个命令,使用这个命令,我们可以动态的查看系统中资源的使用情况

0f742ace71991ada4c0f20e004452957.png

其中有有几个与内存相关的值,值得我们注意

– VIRT RES SHR

(腾讯一面我被问到了这个问题,top里面的这三个字段代表什么意思,我当时不知道,好吧我平时使用top都是只看百分比的,哭了)

好的,那么top中的这三个字段到底代表什么意思呢,百度一下,你就知道

– VIRT 虚拟内存

– RES 驻留内存

– SHR 共享内存

这几个内存到底代表什么含义呢,为什么一个进程的内存占用要弄的这么复杂呢?

这就涉及到linux的内存管理机制了,关于linux的内存管理,我们后面详谈,这里,我们先解决这三个内存含义吧

虚拟内存(VIRT)

– 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

– 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

驻留内存(res)

– 进程当前使用的内存大小,但不包括swap out

– 包含其他进程的共享

– 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

– 关于库占用内存的情况,它只统计加载的库文件所占内存大小

共享内存(shr)

– 除了自身进程的共享内存,也包括其他进程的共享内存

– 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

– 计算某个进程所占的物理内存大小公式:RES – SHR

– swap out后,它将会降下来

有一个典型的例子,当我们执行以下两行代码

cpp

int *p=(int*)malloc(sizeof(int)*1000);

memset(p,0,sizeof(p));

当我们执行这两条指令之后,上面的三种内存会怎么改变呢,首先,我们要知道linux里面的内存管理策略是,你要多少,我们分配给你多少,单别高兴的太早,我给你的内存是虚拟地址空间里面的,如果你不用到它,操作系统就不会虚拟地址映射到物理地址上面,所以当执行malloc之后,虚拟内存会变大,单驻留内存不会变,在执行memset之后,访问内存时产生了却也终端,操作系统将分配的虚拟地址映射到物理地址之上,这时,进程实际使用了这段内存,自然,驻留内存就增加了,当然,这一点内存不是共享的,所以共享内存自然不会增加。

除了上述的三个字段之外,还有一个data字段,表明的是数据占用的内存。如果top没有显示,按f键可以显示出来。这一块是真正的该程序要求的数据空间,是真正在运行中要使用的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值