bin主要分为fastbins,smallbins,largebins,unsortedbin 四种
而在glibc2.26引入tcache bin(这个后面再提及
对于这些bin,会通过单链表/双链表连接(fd和bk),达到空间的充分利用。
对于smallbins、largebins、unsortedbin 来说,ptmalloc 将它们维护在同一个数组中。
数组通过fd/bk进行索引,其中会存在内存复用(bin1的fd和bin2的pre_size在索引位置等)
数组中的bin的结果:
第一个为unsorted bin
索引从2~63为small bin,同一个smallbin链表中的chunk大小相同。
smallbin之后的是largebins,largebins中的每一个bin都包含一定范围内的chunk,不同大小的chunk按fd大小从大到小排列,而相同大小的chunk依旧按照最近使用顺序排列。
同时任意两个物理相邻的空闲 chunk 不能在一起。
fastbin作为最简单的bin就不介绍了 fastbin数组大小为10,可以表示0x20~0xb0的大小,单链表连接
smallbins:
对于largebin我只能说看这张图