注册 登录
编程论坛 数据结构与算法

链表的内存管理之你见

do8do8do8 发布于 2010-08-02 10:57, 1000 次点击
申请个内存空间用malloc 释放一个内存空间用free
每个malloc 之后 必定 要用释放
频繁的运用malloc 和 free 会有什么影响?效率是否会变慢。

先一次性申请多个内存,用一个链表结构把它们连起来。
用的时候,在内存链表查找可用内存,返回可用内存地址,再把此内存从内存链表中删除,如果内存链表中无可用内存,再调用malloc来申请内存。
释放的时候,把内存插入内存链表中。

在程序结束之前 释放内存链表即可。

此法引自台湾资讯教育小组一书《数据结构-C语言版》
4 回复
#2
sen_lin2010-08-02 12:42
这种方法不就是操作系统分配内存的方法吗,看看操作系统的教程,好像是的!
#3
hzh5122010-08-02 18:11
程序中如果用malloc等函数,则是在堆上分配空间,如果你看过malloc的函数体,你可以发现它是与操作系统打交道的,显然操作系统要查找合适的空间块,甚至会查找虚存,频繁的申请和释放导致性能下降。

所以都应用内存池技术(可以Google一下),相当于先从操作系统中malloc一批空间,自己管理分配和释放,这样频繁申请和释放,就不会产生每次都要跟操作系统交互的开销,性能就上来了,一般是大程序中才会应用此技术。
#4
vfdff2010-08-06 02:13
回复 楼主 do8do8do8
先一次性申请多个内存 ?这多个内存大小怎么分布呢?等大小
#5
最近不在2010-08-14 15:51
对象池,可以有给申请的内存大小赋值(根据实际需求).不足时再分配一些.当小于某一标准,释放.
怎么感觉跟vector的处理方法差不多
1