freeswitch APR库内存池( 二 )


经过多次后,pool->节点列表会产生多个新的节点,组成node链表 。
自动扩展的问题
从分配alloc的代码逻辑可以看出,当内存池的空间不足时,会生成新的node节点扩展内存池空间 。
内存池的内存空间并非是连续的,而是以单向链表的形式组合多个node节点,并且没有node个数的限制,理论上可以无限扩展直到内存被占满 。
apr内存池没有内存回收接口,即使有内存空间明确不再需要使用,也没有提供对应的回收接口,除非对整个内存池执行clear或者,才能回收整个内存池空间 。
总结
从apr库内存池的接口逻辑来看,该内存池更多适用于会话式场景,一个新的会话对应一个内存池,会话结束后,直接对内存池整体回收,简化会话过程中的内存管理 。
而对于更长的生命周期的代码逻辑来说,使用上需要注意内存占用问题,防止内存的无限增长 。
另外,apr内存池还有一些特性(包括调试、多线程、分配失败回调、子池等)需要更深入的学习和测试 。
空空如常
求真得真