请教如何在频繁的动态分配内存时尽量减少内存碎片? ---最后的21分!

aguang_liu 2001-06-12 07:58:00
malloc,free 与 realloc有什么差别?

在使用realloc时有什么要注意的吗?

我记得以前见过有关资料,但忘记了具体是如何实现的。有那位大侠愿帮忙?
...全文
694 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_wyq 2001-06-15
  • 打赏
  • 举报
回复
自己管理内存罗。
huahua0459 2001-06-15
  • 打赏
  • 举报
回复
有些情况需要自己分配内存,可以设计一个数据结构,
很多程序都是自己管理内存,可以找找一些源程序看看.
如apache server.
james_razor 2001-06-14
  • 打赏
  • 举报
回复
嘿嘿,刚才看了一些资料,分析了一点代码,现学现卖:在堆上动态分配的内存无需考虑碎片问题,在释放内存时,堆管理代码会进行合并。缺点:性能大大下降。
请看:
http://www.microsoft.com/china/msdn/library/techart/heap3.asp
tianlon 2001-06-14
  • 打赏
  • 举报
回复
可以申请一个BUFFER自己管理
上面说的比较详细
3nt 2001-06-12
  • 打赏
  • 举报
回复
现代操作系统内存管理一般都使用改进的伙伴算法或者zone分配器,应该不用自己考虑内存碎片问题吧。
ed9er 2001-06-12
  • 打赏
  • 举报
回复
你可以用自己维护的对象池来减少碎片,所谓什么对象池无非就是一个列表,里面每一项指向一块你常用的那种数据的buf,在一开始就初始化好,然后用标明哪个未用,哪个已用,当不够用的时候再申请更多的内存,如果是要长时间运行的程序,可以在中途决定是否释放一部分,具体如何实现可以根据你的习惯,c的话只能用函数,c++可以象cber说的那样用重载的new和delete,也可以写成方法名譬如get, free,这个方法在c++里不如在java里有用
cber 2001-06-12
  • 打赏
  • 举报
回复
想在频繁的动态分配内存时尽量减少内存碎片,一个可行的做法是重载自己的operator new以及operator delete,具体的做法可以参考Effective C++中的有关条款
风中老长 2001-06-12
  • 打赏
  • 举报
回复
void * malloc(unsigned size)
作用是得到指向大小为size的内存区域的首字节的指针,该内存是从堆中已被分配的。在使用指针前建议测试返回值不为空指针,若使用空指针,通常会引起系统毁坏。
void free (void * ptr)
作用是释放由ptr所指向的内存,并将它返回给堆,以便这些内存成为再分配时的可用内存。
void realloc(void * prt,unsigned newsize)
作用是把由ptr所指向的已分配的内存大小变成由newsize所确定的先的大小。由于这个函数为了增加它的尺寸需要移动块,所以内存块的指针必须返回。信息不会丢失。如果堆中没有足够的内存来分配给newsize字节,函数将返回空指针,原先的块也会被丢失。
cbc 2001-06-12
  • 打赏
  • 举报
回复
malloc
Allocates memory blocks.
void *malloc( size_t size );

free
Deallocates or frees a memory block.
void free( void *memblock );

realloc
Reallocate memory blocks.
void *realloc( void *memblock, size_t size );
brucegong 2001-06-12
  • 打赏
  • 举报
回复




这个问题不应该由你来考虑,除非你在写OS,不过,自己分配内存是多考虑一下还是有好处的,也应该考虑一下少造成碎片。


69,371

社区成员

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

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