VIRT, SHR, RES, DATA, CODE, SWAP

写服务端程序,对这几个值深入认识很重要,网上也有很多帖子讲这个概念的,但是大多都是出自几个作者的名下的 转载. 说的也比较笼统, 比如RES=DATA+CODE 但是很多实际情况并不是这样. 

从下面的程序来分析这个值的真正含义.

int main(void) {

    while (1) {
        ;   
    }   
    return 0;

}

运行这个程序后来看看这几个值情况:


VIRT  是这个进程最大能够占用的内存空间,是个额定值,虚拟的!

RES     为进程占用的实际内存的大小, 也就是在内存条中占用的大小(物理内存),当然不包含被置换的大小

%MEM 是进程占用的物理内存的百分比

SHR  是共享内存大小, 也是额定的 表示这个程序可能被其它程序共享到的大小

CODE 进程的代码段在际内存中占用的空间大小

DATA 是程序运行时需要使用的数据空间(数据+栈),

SWAP 是交换分区的大小,被置换的!


.. 从上面的图可以得出

 VIRT(4000) = RES(280) + SWAP(3720)  

但是

RES(280) != CODE(4) + DATA(188) 

这是为什么呢? 试试下面这段代码:

#include <stdio.h>
int main(int argc, const char *argv[]) 
{
    char* a = (char*)malloc(104857600);
    /*memset(a, 0, 104857600);*/
    while (1) ;
    return 0;
}
实验发现:

data也是额定的 也就是说 当你malloc时就会显示的大小 ,而RES值不会进行变化, 但是当向malloc的这段内存中进行 memset 或者写数据时 RES 才会趋向于 data+code

top -p 1309, 1882 查看某一进程
c 显示全路径

W 写入配置文件


Usage of Top Command: http://www.thegeekstuff.com/2010/01/15-practical-unix-linux-top-command-examples/






原文链接: http://blog.csdn.net/crazyjixiang/article/details/6917703

转载于:https://my.oschina.net/chen106106/blog/51103

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值