• 《Glibc内存管理》笔记DAY6


    核心结构体分析

    malloc_state

    Binmap

    #define BINMAPSHIFT      5 #define BITSPERMAP       (1U << BINMAPSHIFT) #define BINMAPSIZE       (NBINS / BITSPERMAP) 
     
    #define idx2block(i)     ((i) >> BINMAPSHIFT) #define idx2bit(i)       ((1U << ((i) & ((1U << BINMAPSHIFT)-1)))) 
     
    #define mark_bin(m,i)    ((m)->binmap[idx2block(i)] |=  idx2bit(i)) #define unmark_bin(m,i)  ((m)->binmap[idx2block(i)] &= ~(idx2bit(i))) #define get_binmap(m,i)  ((m)->binmap[idx2block(i)] &   idx2bit(i)
    
    binmap一共128bits,16字节,4个int大小,binmap按int分成4个block,每个block有32个bit。
    
    • idx2block:计算出该 bin 在 binmap 对应的 bit 属于哪个 block
    • idx2bit:取第 i 位为1,其他位都为 0 的掩码
    • mark_bin:设置第 i 个 bin 在 binmap 中对应的 bit 位为 1
    • unmark_bin:设置第 i 个 bin 在 binmap 中对应的 bit 位为 0
    • get_binmap:获取第 i 个 bin 在 binmap 中对应的 bit。
  • 相关阅读:
    Daily Scrum02 12.05
    Daily Scrum02 12.04
    用户调研报告
    Daily Scrum02 12.03
    Daily Scrum02 12.02
    Daily Scrum02 12.01
    Daily Scrum02 11.30
    软件工程项目组Z.XML会议记录 2013/11/27
    Daily Scrum02 11.29
    201509-3 模板生成系统
  • 原文地址:https://www.cnblogs.com/luoleqi/p/12192428.html
Copyright © 2020-2023  润新知