免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2008-06-10 23:15 |只看该作者
原帖由 bigluo 于 2008-6-10 16:41 发表


这个肯定不是泄漏,因为有确定的释放逻辑。这种问题倒也不至于到无解那么恐怖,如果事先知道malloc/free的这种特性的话,上面那段code这么写就好了。关键是如何发现已有程序当中,特别是嵌入系统上,类似的 ...


这个肯定不是泄漏,因为有确定的释放逻辑。这种问题倒也不至于到无解那么恐怖

如果你需要使用到 那就不是泄漏。 但如果你明明不需要了 却没有释放, 一直到程序结束了 由你的代码再释放( 非操作系统自动收回)
那就可以算作是泄漏。    这样的泄漏很典型。


比较典型的错误。  你有一个内存池, 你回收回来的内存块,没有办法被再次使用出去了。 但是在最后销毁池的时候 可以被销毁掉。
这种你认为是泄漏吗? 你用内存工具什么都查不出来。

论坛徽章:
0
22 [报告]
发表于 2008-06-10 23:46 |只看该作者
原帖由 Solidus 于 2008-6-10 22:03 发表
linux的内存管理机制我不清楚,实际上win下的所谓内存碎片整理(RAM优化什么的)原理非常简单,申请非常大的内存(把自己的工作集扩张的非常大,导致其他进程(包括被操作系统内核占用的可换出的内存页全部drop ...


赞同所言.

论坛徽章:
0
23 [报告]
发表于 2008-06-11 08:50 |只看该作者
引用Solidus

同意. 内存物理上使用基本没有所谓的碎片问题. 也不需要整理. 本来就是在碎片方式下工作, 有不存在硬盘的寻址速度问题.

虚拟内存(malloc/free)在页中的或边界的是应用自己的事情, 别人无法整理, 连OS也无法整理.

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

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

论坛徽章:
0
24 [报告]
发表于 2008-06-11 09:08 |只看该作者
原帖由 bigluo 于 2008-6-10 14:29 发表


不要以为linux有多么先进,基本所有的操作系统都会存在内部碎片和外部碎片。就linux而言,内部碎片是kernel产生的,这里先不说;malloc/free如果使用不当,也会产生很多碎片,比如下面的代码:


char* p ...

鬼才知道你留着最后这个指针要干什么,这种问题都要工具分析,你怎么不找个工具直接给你分析一下你的代码逻辑是不是对的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
25 [报告]
发表于 2008-06-11 09:48 |只看该作者
从未听说过LINUX有内存碎片
windows运行久了就会变慢,乱糟糟的内存和乱糟糟的硬盘
LINUX/FreeBSD不存在这种让人恼火的问题

论坛徽章:
0
26 [报告]
发表于 2008-06-11 13:49 |只看该作者
原帖由 safedead 于 2008-6-11 09:48 发表
从未听说过LINUX有内存碎片
windows运行久了就会变慢,乱糟糟的内存和乱糟糟的硬盘
LINUX/FreeBSD不存在这种让人恼火的问题

论坛徽章:
0
27 [报告]
发表于 2008-06-11 15:19 |只看该作者

MS的毒害够深啊
肯定是处在从MS到linux转型中

论坛徽章:
0
28 [报告]
发表于 2008-06-11 18:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
29 [报告]
发表于 2008-06-11 19:03 |只看该作者
同意. 内存物理上使用基本没有所谓的碎片问题. 也不需要整理. 本来就是在碎片方式下工作, 有不存在硬盘的寻址速度问题.

虚拟内存(malloc/free)在页中的或边界的是应用自己的事情, 别人无法整理, 连OS也无法整理.


其实内存是有碎片问题的,虽然在现代os和libc下由于虚拟内存的加入,可能已经不太能表示出了
不过问题也主要不是速度问题,而是空间问题

前两天ds上就碰到了内存碎片问题
64k vram,malloc了32k+10k,然后free了32k的那块内存,接下来malloc 40k内存失败
开始百思不得其解,后来想明白了
32k+10k+22k = 64k
当free 32k的时候,10k的那块区域依然标志着使用中,结果就是前32k内存不够40k,后22k内存也不够40k,导致malloc失败

当然这些都是库实现的问题,只是说明一下,这种情况还是碰得到的,特别是单片机一类无虚拟内存可以用来调整内存布局的环境下,要是不加以管理的话,很容易引起潜在的错误

[ 本帖最后由 Strange 于 2008-6-11 19:09 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2008-06-11 20:57 |只看该作者
原帖由 Strange 于 2008-6-11 19:03 发表


其实内存是有碎片问题的,虽然在现代os和libc下由于虚拟内存的加入,可能已经不太能表示出了
不过问题也主要不是速度问题,而是空间问题

前两天ds上就碰到了内存碎片问题
64k vram,malloc了32k+10k, ...

伙伴系统~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP