Memory pool (线程池) 与 malloc/free

什么是内存池

(Memory Pool)是一种内存分配方式。

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。

在内核中有不少地方内存分配不允许失败. 作为一个在这些情况下确保分配的方式, 内核开发者创建了一个已知为内存池(或者是 "mempool" )的抽象. 一个内存池真实地只是一类后备缓存, 它尽力一直保持一个空闲内存列表给紧急时使用.

 

malloc/free的缺点

通常我们习惯直接使用new、malloc等API申请分配内存,这些函数通常是线程安全的,可是,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能(malloc/free函数会导致用户态和核态的切换,加锁解锁等操作)。

 

顺带马克一下好文:http://m.blog.csdn.net/blog/chhuach2005/23863625

posted @ 2015-08-27 05:23  chunyi  阅读(420)  评论(0编辑  收藏  举报