0day堆(1)堆的管理策略

基本概念

  • 堆块:堆区内存的基本单位
    • 包括两个部分:块首,块身
    • 块首:标识这个堆块自身的信息:如大小,是否被占用等
    • 块身:分配给用户使用的数据区
  • 堆表:一般位于堆区的起始位置,用于索引堆区所有堆块的信息,包括大小,是否被占用等.
    • 占用态的堆块被使用它的程序索引,堆表只索引所有空闲态的堆块.
    • 堆表分为空闲双向链表Freelist(空表),快速单向链表Lookaside(块表)
  • 空表
    • 块首:包含一对用于将空闲堆块组织成双向链表的指针
    • 空表被分为128条,按照大小区分
    • 结构如下free[0]中存放的为不小于1024bytes的堆块链表指针,其余为index*8
      在这里插入图片描述
  • 堆中的操作:堆块分配,堆块释放,堆块合并
  • 块表结构:单向链表
  • 块表不会发生堆块合并
  • 块表总被初始化为空
  • 最多四个结点
    在这里插入图片描述

堆块中的操作

  • 堆块分配:块表分配,普通空表分配和零号空表(Free[0])分配

  • 块表分配:

    1. 寻找到大小合适的空闲堆块
    2. 修改其状态为占用态
    3. 从堆表中"卸下"
    4. 返回一个指向堆块的指针
  • 普通空表分配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值