社区
C语言
帖子详情
请教如何在频繁的动态分配内存时尽量减少内存碎片? ---最后的21分!
aguang_liu
2001-06-12 07:58:00
malloc,free 与 realloc有什么差别?
在使用realloc时有什么要注意的吗?
我记得以前见过有关资料,但忘记了具体是如何实现的。有那位大侠愿帮忙?
...全文
694
10
打赏
收藏
请教如何在频繁的动态分配内存时尽量减少内存碎片? ---最后的21分!
malloc,free 与 realloc有什么差别? 在使用realloc时有什么要注意的吗? 我记得以前见过有关资料,但忘记了具体是如何实现的。有那位大侠愿帮忙?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,不过,自己分配内存是多考虑一下还是有好处的,也应该考虑一下少造成碎片。
Java编程拾遗『JVM垃圾回收』
经过半个世纪的发展,
内存
动态
分
配与
内存
回收技术已经相当成熟,一切看起来都进入“自动化”
时
代,那么为什么我们还要去了解GC和
内存
分
配呢?原因很简单:当需要排查各种
内存
溢出、
内存
泄漏问题
时
,当垃圾收集成为...
GLIBC
内存
管理机制
几周前我曾提到,我被项目组
分
配去做了一些探究linux下
内存
管理机制的活儿。因为我们的产品遇到了一些与之相关的“诡异”问题。这些问题以及相关情况可以概括如下: 先介绍一下相关的背景。由于我们是3D...
glibc下的
内存
管理
几周前我曾提到,我被项目组
分
配去做了一些探究linux下
内存
管理机制的活儿。因为我们的产品遇到了一些与之相关的“诡异”问题。这些问题以及相关情况可以概括如下: 先介绍一下相关的背景。由于我们是3D软件,...
数据库面试题
游标是从数据表中提取出来的数据,以临
时
表的形式存放在
内存
中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作,然后将操作结果写回数据表中...
C/C++笔试题(很多)
(1)调度:线程作为调度和
分
配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章