内存碎片!!

liulili19830401 2008-11-27 12:02:08
1.如何防止出现内存碎片?
2.当出现内存碎片的事后如何做内存处理?
3.一个进程的虚拟地址空间出现内存碎片,有什么好的解决方案?

欢迎高手解析~~~
...全文
308 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubuweiright 2008-11-28
  • 打赏
  • 举报
回复

操作系统和回收机制
liulili19830401 2008-11-28
  • 打赏
  • 举报
回复

特别鸣谢"小星星"~~~


两种比较好的内存碎片的处理方法!
1引用计数
2内存池
spofmy 2008-11-28
  • 打赏
  • 举报
回复
顶啦
wudeshou82666 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 rulary 的回复:]
内存碎片问题,在设计像服务器这样的系统时,是很需要考虑的,因为像这样的系统往往需要长时间不间断的运行,
如果资源管理不好的话,那么很容易崩溃或者运行不了多长时间就要关闭系统进行维护,所以也不要小觑
[/Quote]
讲得挺好的
lin_style 2008-11-27
  • 打赏
  • 举报
回复
http://lin-style.javaeye.com/blog/256146


jolly_ye 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lbh2001 的回复:]
拜托,这个是OS考虑的问题
如果你实在很在意,那就使用内存池技术
绝大多数情况下没必要考虑这个,还是把时间放在设计和算法上
[/Quote]

upup
libing035 2008-11-27
  • 打赏
  • 举报
回复
mark
帅得不敢出门 2008-11-27
  • 打赏
  • 举报
回复
内存碎片无法杜绝 只有设计好的算法尽量避免生成碎片.
当你要频繁使用new malloc申请内存时并释放,可以考虑使用内存池
产生碎片这个一般不会做特定处理
只有当产生缺页中断时才会进行内存的交换调度,具体依赖与这个交换算法(而这是操作系统帮你做的事了)
wyswyg63 2008-11-27
  • 打赏
  • 举报
回复
up
lbh2001 2008-11-27
  • 打赏
  • 举报
回复
拜托,这个是OS考虑的问题
如果你实在很在意,那就使用内存池技术
绝大多数情况下没必要考虑这个,还是把时间放在设计和算法上
dzc8866 2008-11-27
  • 打赏
  • 举报
回复
UP
oo 2008-11-27
  • 打赏
  • 举报
回复
up
toadzw 2008-11-27
  • 打赏
  • 举报
回复
指内存分配时,二个内存间的小的空间无法分配给程序使用,对于内存珍贵的我们可以先分配大空间,然后在空间上进行操作,这样可以防内存碎片:如用new placement;
我认为一般不用处理;只能防;
liaoweixiaoyu 2008-11-27
  • 打赏
  • 举报
回复
up
就呆在云上 2008-11-27
  • 打赏
  • 举报
回复
我觉得这个文章说的非常好了
老外的见解,不晓得如何,希望楼主看看:
http://article.ednchina.com/2004-10/AtcShow2005128110353.htm

不过听说linux系统有内存碎片的自动处理机制,楼主也可以google一下,看看是怎么一回事呵呵
rularys 2008-11-27
  • 打赏
  • 举报
回复
内存碎片问题,在设计像服务器这样的系统时,是很需要考虑的,因为像这样的系统往往需要长时间不间断的运行,
如果资源管理不好的话,那么很容易崩溃或者运行不了多长时间就要关闭系统进行维护,所以也不要小觑
rularys 2008-11-27
  • 打赏
  • 举报
回复
真正的内存碎片,OS会帮打理的很好,程序需要考虑的是虚拟空间地址的碎片——内存地址被割裂成碎片,
这才是平常所说的内存碎片问题。说这个,是因为有人把这个问题又扯到OS了,然后我也不知道楼主说的
是第一种内存碎片还是第二种了~不过,如果是第一种,那么除非楼主自行修改OS,否则解决不了;如果是
第二种,我的经验就是,如果程序运行期内会有很频繁的内存申请与释放,并且是很零碎的内存快操作
的话,可以一开始向系统申请保留几块相当的内存空间(只是保留,实际上有没有被提交到物理内存那是
看OS的调度),以后每个空间块会被按相应的内存申请大小来使用——比如,一块用来提供所有细碎的内存
,一块用来提供那些需要比较大内存块的申请;最好就是,如果有反复申请/释放固定大小的内存块的地方,
那么这些地方将在同一个保留的内存空间块里面申请与释放。这样,就能比较好的控制内存碎片问题,因为
内存碎片被限定在了可知的保留空间区域内(细碎的内存申请/释放所产生的碎片,不会影响到那些不在同一个
保留空间区域的有固定大小和结构的内存块)。比如,用Windows的堆管理API就能办到
Longinc 2008-11-27
  • 打赏
  • 举报
回复
学习
加载更多回复(3)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧