# mem_pool **Repository Path**: liudegui/mem_pool ## Basic Information - **Project Name**: mem_pool - **Description**: 符合Misra C++标准且支持mmap的内存池管理模块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2024-05-12 - **Last Updated**: 2024-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 概述 定义内存管理的相关行为。使用了预分配的管理,先分配一块足够大的内存,然后需要时再从这块内存中进行分配。 ## 类之间的关系 | 模块名 | 功能 | |--|--| |MemPool | 内存池模块入口,提供常用的模块间交互需要的数据内存池管理 | |MemAllocDelegate| 用于内存池中的统一对整块系统内存的申请和释放,有Mem和Default两种申请方式 | |MemPoolManager| 对由MemMapMemAllocator申请到的整块大内存,进行小颗粒度的精准分配和释放(这里的申请和释放不是针对系统资源,而是针对内存池中的大块内存而言) | |DefaultMemAllocator| 默认的内存申请方式。使用是std::list>申请和管理。 | |MemMapMemAllocator| 内存映射方式申请共享内存| MemPool 使用 MemPoolDelegate 来获取一块大的内存,然后使用 MemPoolManager 对这块内存进行关系。 1、DefaultMemAllocator模块使用C++的STL的std::list>申请内存; 原因:符合Misra规范,Misra C和C++都不支持直接使用malloc/new申请内存 2、MemAllocDelegate支持两种内存申请方式的对象,DefaultMemAllocator和MemMapMemAllocator; 3、 /dev/mem: /dev/mem是系统物理内存的映像文件; /dev/zero: 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。