1.内存块池由固定大小的块组成,不会出现任何碎片问题。每个内存块池都是一个公用资源。
2.分配和释放固定大小内存块所需的时间与简单的链接列表操作所需的时间相当。可以在可用
列表的开头完成内存块分配和取消分配
3.缺点:缺乏灵活性。池的块大小必须足够大,才能处理其用户最坏情况下的内存需求。如果对同一个池发出了许多大小不同的内存请求,则可能会浪费内存。
解决方案:创建多个不同的内存块池,这些池包含不同大小的内存块。
4.创建内存块池
线程在初始化期间或运行时创建。 应用程序中内存块池的数量没有限制。
5.内存块大小
块大小(以字节为单位)在创建池时指定。
6.池容量
与内存区域的块大小和总字节数有关。
池容量=块大小(包括填充和指针开销字节)÷提供的内存区域的总字节数。
7.池的内存区域
在创建时指定。
假设某个通信产品有一个用于 I/O 的高速内存区域。 将此内存区域设置为内存块池即可轻松管理。
8.线程挂起
在等待空池中的内存块时,应用程序线程可能会挂起。
当块返回到池时,将为挂起的线程提供此块,并恢复线程。如果同一内存块池中挂起多个线程,这些线程将按FIFO恢复。
tx_block_pool_prioritize设置优先级,将优先级最高的线程置于挂起列表的前面,让所有其他挂起的线程采用相同的 FIFO 顺序。
9.运行时块池性能信息
通过 tx_block_pool_performance_info_get 和 tx_block_pool_performance_system_info_get获得
(1) 整个系统的总数
已分配的块数、已释放的块数、分配挂起数、分配超时数
(2) 每个块池的总数
已分配的块数、已释放的块数、分配挂起数、分配超时数
分配挂起数”相对较高可能表明块池太小。
10.内存块池控制块 TX_BLOCK_POOL
11.覆盖内存块
确保已分配内存块的用户不会在其边界之外写入。 如果发生这种情况,则会损坏其相邻的内存区域