社区
C语言
帖子详情
请教如何在频繁的动态分配内存时尽量减少内存碎片? ---最后的21分!
aguang_liu
2001-06-12 07:58:00
malloc,free 与 realloc有什么差别?
在使用realloc时有什么要注意的吗?
我记得以前见过有关资料,但忘记了具体是如何实现的。有那位大侠愿帮忙?
...全文
719
10
打赏
收藏
请教如何在频繁的动态分配内存时尽量减少内存碎片? ---最后的21分!
malloc,free 与 realloc有什么差别? 在使用realloc时有什么要注意的吗? 我记得以前见过有关资料,但忘记了具体是如何实现的。有那位大侠愿帮忙?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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,不过,自己分配内存是多考虑一下还是有好处的,也应该考虑一下少造成碎片。
高并发
内存
池
这篇文章是小博主的第一个正式的项目,因此是边写边学(其实怀着学习的目的成
分
更大一点),在做项目的途中会涉及到之前学的知识和未学习的盲区,权当复盘以及学习和打磨细节,在写项目中遇到的问题和知识点将会记录在本博客中。因此这篇博客实际上并不是一篇介绍高并发
内存
池很权威的文章,但博主也会尽力梳理其实现的脉络。因为想把所有相关知识以及自己视角下的心得呈现出来,在项目的主线下或许还会引出周边知识…当前项目实现的是一个高并发的
内存
池(也可以叫做高性能
内存
池)。
C++高薪进阶|C++
内存
管理全景指南
导语深入理解C++
内存
管理,一文了解所有C++
内存
问题,万字长文,建议一键三连。随着AI大模型爆火,智能汽车,芯片起飞,又让C++焕发新春,主要核心框架都是C++实现,目测C++至少未来10年都不会过
时
,仍然处在第一梯队,薪酬依然属于TOP行列。C++的高抽象层次,又兼具高性能,是其他语言所无法替代的,C++标准保持稳定发展,更加现代化,更加强大,更加易用,熟练的 C++ 工程师自然也获得了“高...
glibc下的
内存
管理
原文:http://www.cnblogs.com/lookof/archive/2013/03/26/2981768.html 几周前我曾提到,我被项目组
分
配去做了一些探究linux下
内存
管理机制的活儿。因为我们的产品遇到了一些与之相关的“诡异”问题。这些问题以及相关情况可以概括如下: 先介绍一下相关的背景。由于我们是3D软件,所以用户经常会有“导入/导出”各种geome
Java编程拾遗『JVM垃圾回收』
垃圾收集(Garbage Collection)通常被称为GC,大部
分
人都把这项技术当作Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp语言是第一门真正使用
内存
动态
分
配和垃圾收集技术的语言。经过半个世纪的发展,
内存
动态
分
配与
内存
回收技术已经相当成熟,一切看起来都进入“自动化”
时
代,那么为什么我们还要去了解GC和
内存
分
配呢?原因很简单:当需要排查各种
内存
溢出、
内存
泄漏问题
时
,当垃圾收集成为系统达到更高并发量的瓶颈
时
,我们就需要对这些“自动化”技术实施必要的监控和调
{电脑救助站}常用知识2
问题产生原因原因--解决方法
内存
条坏了--更换
内存
条
双
内存
不兼容--使用同品牌的
内存
或只用一条
内存
内存
质量问题--更换
内存
条
散热问题--加强机箱内部的散热
内存
和主板没插好或和其它硬件不兼容等--重插
内存
或换个插糟
硬盘有问题--更换硬盘
驱动问题--重装驱动。如果是新系统,要先安装主板驱动
软件损坏--重装软件<
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章