免费注册 查看新帖 |

Chinaunix

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

Linux平台写Daemon程序时,频繁使用malloc会不会因为内存碎片导致内存枯竭? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-06-20 00:20 |只看该作者
原帖由 mik 于 2006-6-20 00:07 发表



倒是你自以为是地认为罢了, 我没见LZ这样认为

原帖由 grt8000 于 2006-6-19 23:42 发表

你是指malloc函数已经解决了内存碎片的问题?可以放心使用而不用担心碎片

论坛徽章:
0
22 [报告]
发表于 2006-06-20 00:43 |只看该作者
原帖由 FH 于 2006-6-20 00:17 发表


那就此打住吧!
说实话,俺倒是真的希望你能拿出malloc新的实现来驳倒俺呢,因为俺还是在10多年前看的malloc源码,最近有什么新写法或算法真的不知道。



晕倒!
说实话,我是真的从来都没有看过malloc的实现,不过,我倒是写了两个函数来模拟malloc/free,

http://bbs.chinaunix.net/viewthread.php?tid=691186  我想其主要分配思想也大概差不多!

我倒是真的希望你给我讲讲malloc是怎么实现的!

如果,你真的是本着严谨治学的态度的话,也不致于把10多年前的东东在这里来讨论,要知道,10多年前 linux还是个小BB呢

[ 本帖最后由 mik 于 2006-6-20 01:17 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2006-06-20 00:56 |只看该作者
此贴居然变成了口水之战

我仔细看了看回贴,偶确实有没说清楚之嫌! 嘿嘿~ 难怪这位 FH 仁兄这么大意见,偶可真的不好意思!

不过,这位仁兄,说是按严格malloc/free 顺序来操作,就不可能产生碎片! 确实不太令人认可!

你的是怎么测试的? 就算是,也不排除是由于系统回收、归并等操作

论坛徽章:
0
24 [报告]
发表于 2006-06-20 01:10 |只看该作者
而且严格的按照先 malloc 再 free 的顺序也不大可能。一般来说使用 malloc 肯定会产生碎片,但是绝大多数情况下引起问题的是忘记回收的内存而不是那一点内存碎片(内存碎片产生问题的可能性恐怕不会大于买彩票中头奖的几率)

论坛徽章:
0
25 [报告]
发表于 2006-06-20 08:32 |只看该作者
原帖由 mik 于 2006-6-20 00:43 发表


如果,你真的是本着严谨治学的态度的话,也不致于把10多年前的东东在这里来讨论,要知道,10多年前 linux还是个小BB呢


从这句话就可以看出你是无知还自以为是,俺今天豁出老命给你开开蒙,让你知道天外有天!
malloc这种东西10多年不变有什么奇怪吗?俺先告诉你10多年前的malloc是什么样子,不求你看懂后能脸红,只求你今后别再误人子弟。

malloc/free内部管理两个链表,已用区链表和未用区链表,初始时,已用区链表为空,未用区链表只有一项,每项有一个起始地址和一个长度。
当malloc/calloc申请一块内存时,扫描未用区,找到第一个不小于请求长度的项,切割后将其分配出去,并修改剩余部分的地址和长度。
当free时,将指定地址加长度后与未用区的第一项的起始地址进行比较,如果相等,则将两者合并,否则在未用链表中添加一项。
从上面算法可以看出,只要按照先申请后释放原则,就不会产生任何碎片!原作者的高明之处就在于此!

你原来模拟的那个帖子俺见过,说实话作为学生练习未尝不可,但以为这就是malloc/free的算法则未免太浅薄了吧?
俺今天之所以这么苦口婆心说了这么多,实在是因为看不下去有人井蛙之见还自以为是,不懂就是不懂,没必要装懂,那样反而更加让人耻笑。
:em11::em11::em11:

论坛徽章:
0
26 [报告]
发表于 2006-06-20 08:36 |只看该作者
原帖由 isjfk 于 2006-6-20 01:10 发表
而且严格的按照先 malloc 再 free 的顺序也不大可能。一般来说使用 malloc 肯定会产生碎片,但是绝大多数情况下引起问题的是忘记回收的内存而不是那一点内存碎片(内存碎片产生问题的可能性恐怕不会大于买彩票中头 ...


为什么不可能?你在做应用的时候不能遵守这一点吗?俺不相信有什么应用做不到这一点!:em11::em11:

至于内存碎片有多大影响,你在Windows/Office上连续工作24小时看看后果就知道了,或者用IE多打开些窗口,先后打开1000个之后你的系统不崩溃才怪,这就是内存碎片的威力!

论坛徽章:
0
27 [报告]
发表于 2006-06-20 08:49 |只看该作者
原帖由 FH 于 2006-6-20 08:32 发表


从这句话就可以看出你是无知还自以为是,俺今天豁出老命给你开开蒙,让你知道天外有天!
malloc这种东西10多年不变有什么奇怪吗?俺先告诉你10多年前的malloc是什么样子,不求你看懂后能脸红,只求你今后别再 ...



如果,你真的看得明我的代码的话,也不会如此的叫嚣!

就你说的这些原则,我没见过malloc/free都能写得出,你呢?

论坛徽章:
0
28 [报告]
发表于 2006-06-20 08:57 |只看该作者
原帖由 mik 于 2006-6-20 08:49 发表



如果,你真的看得明我的代码的话,也不会如此的叫嚣!

就你说的这些原则,我没见过malloc/free都能写得出,你呢?


无语了,祝你越来越牛——至少嘴上:em11::em11::em11:

malloc/free这种代码俺读过之后确实没有写过,因为俺学C语言是在工作中,4天学完了C就要上项目,因此没机会做各种练习。
至于俺的代码,涉及很多商业机密,不允许俺拿出来“炫耀”,至于自己玩的代码,如果没有经过严格对比测试取得优势,俺也不敢贴出来,以免让读者笑掉大牙。:em11::em11::em11:

[ 本帖最后由 FH 于 2006-6-20 09:03 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2006-06-20 08:58 |只看该作者
为什么不考虑用内存池呢

论坛徽章:
0
30 [报告]
发表于 2006-06-20 08:59 |只看该作者
为什么没见到有人提到应用层管理内存池哪?这样底层实现的影响不更小吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP