jemalloc源码结构分析(二):CPU字节对齐算法

时间:2021-06-14 05:15:29

在调用arena_malloc_small过程中,要根据申请内存大小,进行对齐计算,然后分配一个整块儿。算法如下:

1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_size2bin与arena_bin_info数组;

2)根据small_size2bin查找当前申请内存块大小的对齐后的分组位置,再根据该位置到arena_bin_info数组查找对应补齐后的分配真实内存大小;

例子:需要申请a=1234字节大小的内存

1)以8个字节分组取整,a/8或a>>3获得small_size2bin中位置pos1;

2)small_size2bin[pos1]值为索引在arena_bin_info数组中查找,最终arena_bin_info[small_size2bin[pos1]]即对齐后需要分配的内存大小。

...

申请大小范围(字节 ) 对齐粒度大小(字节)被整除 描述                         
0~8 8 不足8字节的补齐为8字节
9~16 8 被8整除
17~128 16 可被16整除
129~256 32 可被32整除
257~512 64  
513~1024 128  
1025~2048 256  
2049~3584 512