创建内存块池 tx_bpc.c

UINT  _tx_byte_pool_create(

        //内存块池控制块指针

        TX_BYTE_POOL *pool_ptr

        //内存块池名字指针

        CHAR *name_ptr

        //内存块池固定块大小

        ULONG block_size

        //内存块池内存的起始地址

        VOID *pool_start

        //内存块池整个内存的大小

        ULONG pool_size)

局部变量:

block_ptr

当前块指针

tail_ptr

指向created list尾部内存块池

        


流程:

1.内存块、整个内存块池大小4字节对齐

 

2.初始化BCB

        (1) 初始化各字段、内存起始地址

        (2) 计算内存池尾部地址

        (3) 遍历内存块池,记录可使用的内存块 available list

                1) 计算下一块首地址。//每个块头部预留sizeof(CHAR_PTR)字节作为控制字段,这时候还没有初始化,所以不能直接用头部的指针

        

                2) 循环初始化所有块(除最后一块),并累加可用块(blocks)

                //每个块的控制字段指向相邻下一块的首地址,构成单向链表,最后一块控制字段指向NULL

                        a) 每个块的控制字段指向相邻下一块的首地址

                                 

                                block_ptr指向当前块的首地址,该语句即将当前块的控制字段指向相邻下一块的首地址

                        b) 将block_ptr指向下一块首地址

                        c) next_block_ptr指向下下块

                                最后一次循环结束时,block_ptr指向内存块池最后一块的下一块

        (4) 计算出最后一块的首地址,最后一块的控制字段指向NULL

                //因为循环结束后,block_ptr指向内存块池最后一块的下一块,所以-block_size-sizeof(AHCR_PTR)

        (5) tx_block_pool_available(可用块数量)、tx_block_pool_total(总块数)=blocks

        (6) tx_block_pool_available_list指向第一个空闲块;如果blocks为0,指向NULL

3.将内存块池加入created list

        (1) 禁止中断

        (2) 设置内存池id //使其有效

        (3) 将内存池插入_tx_block_pool_created list

                1) 若created list不为空,加到尾部

                2) 若空,直接加入

        (4) created count++

        (5) 恢复中断

        (6) 返回TX_SUCCESS

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值