内存块池(memory block pools)

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.覆盖内存块

        确保已分配内存块的用户不会在其边界之外写入。 如果发生这种情况,则会损坏其相邻的内存区域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值