免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4664 | 回复: 6
打印 上一主题 下一主题

[C] unix下c语言查看进程内存大小 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-23 20:17 |只看该作者 |倒序浏览
Hello
       在一个项目里面要验证内存的操作正确性,要打印出进程使用的内存状况,但是遇到了一点不明白的问题。
     思路如下:
     system("ps -eo pid,rss,args|grep -v 0.0|sort -rnk2|more" );//查看当前点的rss内存情况 @1
        int *p=(int*)malloc(1024*8 );
        system("ps -eo pid,rss,args|grep -v 0.0|sort -rnk2|more" );// @2
        free(p);
       system("ps -eo pid,rss,args|grep -v 0.0|sort -rnk2|more" );//@3
********************************************************************************************
实际运行时,可以看出我的进程在@2点时必@1多了8KB的内容,但是到了@3后并没有发现rss变小了

不明白为什么@3不能看到rss变小。原因何在?
请明白人指点
运行环境:SunOS 5.8

[ 本帖最后由 micky42308 于 2008-12-24 10:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-24 09:22 |只看该作者
How much should I trust the ps memory reports?

http://www.faqs.org/faqs/aix-faq/part2/section-15.html

论坛徽章:
0
3 [报告]
发表于 2008-12-25 19:25 |只看该作者
好像不能解释这个现象啊

论坛徽章:
0
4 [报告]
发表于 2008-12-26 08:56 |只看该作者
别用ps来查看进程使用的内存,不准

论坛徽章:
0
5 [报告]
发表于 2008-12-26 09:07 |只看该作者
去proc下看

论坛徽章:
0
6 [报告]
发表于 2008-12-26 16:17 |只看该作者
好像APUE上面说,free掉的内存,不一定会交回system的,它会留在进程,以便下一次使用。是这个原因么?

论坛徽章:
0
7 [报告]
发表于 2008-12-26 16:30 |只看该作者
楼上说的是对的

malloc与free是相对的

malloc返回后,内核也并不是真的在物理内存中给进程分配了空间,只是进程寻址到了那部分空间后,内核才去分配,其中的内容还很多.

同理,free后内核只是把那部分空间标志为空闲,并放回到可用内存池中,以便下次malloc时使用,直至进程退出,那部分空间才被系统回收.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP