Advertisement

malloc()的内存池实现

阅读量:

目录

malloc()和free()的分配算法

内存池

池化技术


与栈相比,在某些情况下(即任何时候),程序可能会发起请求来管理一块内存区域。具体来说,在任何时间点上程可能会发出请求来进行以下两种操作中的一种:获取一段新的可用内存块或回收一段已占用的内存空间。需要注意的是这些内存块的大小范围非常广泛它们可以从单个字节到数千兆字节不等。由于无法预估或确定单次请求所需的具体数量因此对于这种动态且多变的内存行为模式必须采用相应的管理策略以确保系统的稳定运行

那么,使用 malloc() 在堆上分配内存到底是如何实现的呢?

一种可能的做法是将malloc的功能转移至内核层。由于内核负责进程地址空间的管理,在其提供相关功能的情况下,默认情况下我们可以让malloc借助这些功能来完成内存分配的任务;然而这种方法从理论上讲是一种可行的方法,在实际应用中却存在明显的性能劣势:每次内存分配或回收都需要通过特定的系统调用来完成操作;我们都知道这些系统调用产生的开销相对较大;因此当程序需要频繁地对堆进行操作时(例如频繁申请或释放动态内存),这种做法会显著影响系统的整体性能表现。

典型的做法是说, malloc( )被操作系统分配了一块适当大小的堆空间,并随后由该函数自行负责管理这块内存区域

malloc() 类似于操作系统为应用分配一块较大的连续内存区域,并将其供其

全部评论 (0)

还没有任何评论哟~