STL空间配置器之第二级配置器的free-list详解

SGI的第二级配置器共存在16种free-list,各自管理的大小分别为8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128bytes的小额区块。
链表free-list的结点结构如下:

union obi{
    union object* free_list_link;
    char client_data[1];  //1是举例值,可以为8,16...128
};

侯捷先生在书中提到该结点具有一物两用的特性,下面是详细解释:
由类型”union”可知指针free_list_link和数组client_data共享一段大小为sizeof(union obj)=4的内存空间。当指针free_list_link指向下一个节点时,client[0]内存储的内容为下一个节点的前一个字节大小的地址(实际上,现在数组client_data并没有使用到)。但当客端需要使用小额区块,即使用client_data数组的时候,free_list_link内存储的下一个节点的地址数据将被覆盖掉,故而free-list也就不再指向他们。
这时就实现了一物两用的目的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值