我的POCO C++库学习 -- 内存管理 (三)
在图中可以看出,AutoReleasePool实际上就是原生指针的一个容器,在其内部定义为:
6. 内存池(Memory Pools) 同以往看过的内存池比较,Poco中内存池相当简单。既不支持对象的分配,也不对内存块大小进行分级,并且释放后的内存的合并策略也很简单。但这绝不是说它简陋,对于大多数情况,我觉得其完全够用了。同AutoReleasePool比较,两者的不同之处在于,AutoReleasePool中内存的分配是交由用户进行的,AutoReleasePool只负责释放,而MemoryPool的思想是,内存的分配和释放都由其管理。 首先来回顾一下内存池的作用: 1. 解决应用程序频繁申请和释放内存带来的执行效率问题 2. 解决内存碎片问题
下面是Poco中内存池函数调用的一些特性: 1. Poco::MemoryPool使用std::vector维护了一组固定大小的内存块指针,每个内存块大小都相等 2. 可以通过MemoryPool::get()获得一个内存块的指针,如果池中内存块不够时,一个新的内存块会被分配。但当池中内存块数目到达池定义的上限时,一个OutOfMemoryException异常会被抛出。 3. 调用MemoryPool::release(void* ptr)将把内存块释放入池中
其头文件中的定义如下:
7. 单件(Singletons) Poco中的单件可以由类模板SingletonHolder完成。其定义如下: