免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bigluo
打印 上一主题 下一主题

linux有查看和整理内存碎片的工具吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-06-10 17:16 |只看该作者
可以自己写个程序,把malloc和free一一对应起来就可以了,不过这个工作太复杂,难度估计不会低于代码分析的难度

论坛徽章:
0
12 [报告]
发表于 2008-06-10 17:46 |只看该作者

回复 #8 思一克 的帖子

我记得在Windows下的"优化大师"好像有这么个工具...
虽然这个工具在PC台式机上越来越用不到了...(现在都是大内存).

不太欣赏一些动不动就扁Windows, 说他很烂的...然后就说Unix/Linux怎么先进...
一般这样说的人都是既对Windows不了解的, 也对Unix/Linux不了解的人...

[ 本帖最后由 jackalchen 于 2008-6-10 17:48 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2008-06-10 18:04 |只看该作者
char *p[100]  存在  p[100]  ???
未完全释放p之前,没有内存回收??? size 为 1,2,3,4,5……的内存同在一页内?

论坛徽章:
0
14 [报告]
发表于 2008-06-10 18:13 |只看该作者
原帖由 jackalchen 于 2008-6-10 17:46 发表
我记得在Windows下的"优化大师"好像有这么个工具...
虽然这个工具在PC台式机上越来越用不到了...(现在都是大内存).

不太欣赏一些动不动就扁Windows, 说他很烂的...然后就说Unix/Linux怎么先进...
一般这样 ...


这个概念和lz不同的
windows优化大师的整理只是把原来内存中的数据,赶到虚拟内存中而已
lz要的是
linux下什么工具可以帮助我们找到程序运行中这样的内存碎片

论坛徽章:
0
15 [报告]
发表于 2008-06-10 18:34 |只看该作者

回复 #14 Strange 的帖子

ok, 谢谢, 我上网查了下, 的确"优化大师"的内存整理是把一些占据在物理内存的部分统统迁移到虚拟内存文件中, 这样就能最大限度腾空物理内存...内存整理这个名词真的是名不副实..

如果要找"帮助我们找到程序运行中这样的内存碎片", 那我至少目前还没有见到过.
(想一下, 这个功能要是好用的话, 还真算是一个不错的特性)

论坛徽章:
0
16 [报告]
发表于 2008-06-10 18:37 |只看该作者

  1. char* p[100];

  2. for(int i=0; i<100; i++)
  3.     p[i] = malloc(i);

  4. for(int i=0; i<99; i++)
  5.     free(p[i]);

复制代码

没有对内存的写操作,应该没有真正分配到物理内存吧?

论坛徽章:
0
17 [报告]
发表于 2008-06-10 20:33 |只看该作者
楼主要的功能,我目前还没有看到有什么软件可以做到。

论坛徽章:
0
18 [报告]
发表于 2008-06-10 20:52 |只看该作者
自己弄个内存池,是不是就没有碎片问题了

[ 本帖最后由 reiase 于 2008-6-10 21:27 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2008-06-10 21:11 |只看该作者
发现很多人对内存碎片的概念不清楚,不要把物理内存扯进来。

LZ能否指点一下Window有什么类似工具?

了解Window和*NIX的更看见它们的相似,而不是不同。

论坛徽章:
0
20 [报告]
发表于 2008-06-10 22:03 |只看该作者
linux的内存管理机制我不清楚,实际上win下的所谓内存碎片整理(RAM优化什么的)原理非常简单,申请非常大的内存(把自己的工作集扩张的非常大,导致其他进程(包括被操作系统内核占用的可换出的内存页全部drop到页面文件上),然后所谓的存储碎片整理程序在已申请并被提交的内存重新还给OS(WIN系统放到空闲列表里,最终被0页面线程清零)变为可用内存,表面上看起来好像获得了更多的可用内存,可实际上是把本身在物理内存的页全放到磁盘上了,因为这个drop操作本身是OS工作集管理器的工作,OS负责调整每个进程的工作集大小,这样被所谓的RAM碎片整理强迫症似的把其他进程本身在物理内存中的页换到页面文件里纯粹是多此一举,因为内存就是为了用的,只有不够了时候才需要换到页面文件中,RAM碎片整理所做的是强行制造一个物理内存不够的情况,迫使操作系统做drop操作,这样当你下次再引用某个被drop到分页文件的进程页面的时候,无非是增加很多本来不需要的磁盘IO操作,反而减慢了性能(因为本身这些页面drop操作是不必要的,不够了OS会工作集管理器会自己做)。在win下本身还有个IO方面的缓存机制,比如你有8G物理内存(我这只是举个例子不考虑内核占用多少内存),随机读取了8G的小碎文件,实际上内核会把整个8g全都用光(参考win task manager那个kernel cache大小),这些小碎文件实际上被放到存储管理器的备用列表里了,当某个进程申请更大的内存而空闲列表为空时候,会从备用列表选出来一些页面清零提交给进程所在的工作集,因此那个RAM碎片整理得效果最终是导致这些IO缓存也失效了,这玩意最终导致的就是更多的磁盘IO操作(分页文件+缓存失效)。

而且从物理内存的角度看,从来也不存在硬盘上的那种所谓的碎片,应该说至少在win下,所有进程所申请并被提交的内存全都是碎片,而且就算你把分页文件关了,OS不做DROP页面操作,单进程(和可被换页的OS内核部分)所引用的物理内存同样是全都是碎片,因为除非你锁定了内存,否则不开分页文件OS内核同样在不断的修改你所引用的物理内存的页面(直接修改页表的指向就可以了),这玩意(至少我保证在win下)完全就分布在物理内存的各处,而且运行中还在不断的移动(虽然不会很频繁).

这个东西很久以前就被批判了很多次了(参考《windows internal》),现代操作系统(我至少保证WIN32),从来就没有碎片,也不需要碎片整理,如果碎片整理有效,哪么这玩意早就会集成在内核中了。

[ 本帖最后由 Solidus 于 2008-6-10 22:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP