首页 > 其他 > 详细

《Glibc内存管理》笔记DAY6

时间:2020-01-30 20:30:00      阅读:79      评论:0      收藏:0      [点我收藏+]

核心结构体分析

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。

《Glibc内存管理》笔记DAY6

原文:https://www.cnblogs.com/luoleqi/p/12192428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!