《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。
posted @ 2020-01-30 19:48  PwnKi  阅读(211)  评论(0编辑  收藏  举报