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中的蓝色的表示还没有分配