(内存管理)54

P54:

源代码的头文件<.../ext/bitmap_allocator.h>

allocate---------->_M_allocate_single_object()只为需要一个元素的客户服务

所有的容器都是一次要一个元素,而分配器又是为容器服务

 

deallocate------->_M_deallocate_single_object()

 

blocks----------------->客户要的(一个元素),假如客户是链表,那么一个node(前后指针、数据)才是一个blocks 

 

因为后面有64个blocks,所以需要64个bit来表示每个blocks是否给出去了

1表示没有给出去,0表示给出去了

bitmap[1]表示一个整数

bitmap[0]表示一个整数

use count表示一个整数,表示后面给出去了多少个blocks

use count前面的一个小格,表示 不包括自身,后面那些格子的大小

 

block size = 8byte,则super block size =

                                                                       =4字节(use count)+2*4字节(bitmap[1]和bitmap[0]的大小)+64*8字节(64个blocks)

                                                                                                   =524byte字节

 

标准库里面的vector实际上就是三根指针--------->_M_start指向头

                                                                              _M_finish指向尾巴的下一个位置

                                                                              _M_end_of_storage也指向_M_finish所指的位置

__mini_vector只占了一个元素的位置

 

 

blocks分配是从左向右进行分配

bitmap是从右向左进行移动

现在用的是最开始的super block

第一个super block全部用光了,现在启动第二个super block

group up中的蓝色的表示还没有分配

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值