linux top命令看到的实存(RES)与虚存(VIRT)分析

本文总结了Linux中top命令显示的VIRT(虚存)和RES(实存)的区别。VIRT表示进程占用的总内存,包括已使用和未使用的部分;而RES则表示实际占用的物理内存。通过堆分配和栈分配内存的测试,发现程序只有在使用内存时才会占用实存。高虚存可能意味着程序申请了大量但未使用的内存。在实践中,若实存过高则提示程序可能申请过多内存。
摘要由CSDN通过智能技术生成

 近期在公司中解决程序使用的内存高问题,将一部分之前无法回收的内存进行了回收,实现降内存效果(降实存)。

在统计效果时, QA问是统计RES(实存)还是VIRT(虚存)。

在网上学习看了一些博客,这里自己总结一下RES和VIRT的区别。

1. 概念

VIRT:

1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
3、VIRT = SWAP + RES

 RES:

1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA

 SHR:

1、除了自身进程的共享内存,也包括其他进程的共享内存;
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小;
3、计算某个进程所占的物理内存大小公式:RES – SHR;
4、swap out后,它将会降下来。

2. 测试

 (1) 使用堆分配内存, 进行测试:

 1 #include <iostream>
 2 #include <stdio.h>
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值