enmu {_ALIGN = 8}
/*将 __bytes 上调至最邻近的 8 的倍数*/
static size_t _S_round_up(size_t __bytes) {
return (((__bytes) + (size_t) _ALIGN-1) & ~((size_t) _ALIGN - 1));
}
(size_t) _ALIGN
用四个字节来表示 7
00000000 00000000 00000000 00000111 --> ((size_t) _ALIGN - 1))
11111111 11111111 11111111 11111000--> ~((size_t) _ALIGN - 1))
((__bytes) + (size_t) _ALIGN-1)
__bytes:是传入要上调的变量
(size_t) _ALIGN-1:和上述一样,用四个字节来表示 7
eg:
当__bytes = 1 时
((__bytes) + (size_t) _ALIGN-1)
--> 00000000 00000000 00000000 00001000
~((size_t) _ALIGN - 1))
--> 11111111 11111111 11111111 11111000
二者相与(&)
00000000 00000000 00000000 00001000 = 8
当__bytes = 2 时
((__bytes) + (size_t) _ALIGN-1)
--> 00000000 00000000 00000000 00001001
~((size_t) _ALIGN - 1))
--> 11111111 11111111 11111111 11111000
二者相与(&)
00000000 00000000 00000000 00001000 = 8
.....
当__bytes = 8 时
((__bytes) + (size_t) _ALIGN-1)
--> 00000000 00000000 00000000 00001111
~((size_t) _ALIGN - 1))
--> 11111111 11111111 11111111 11101000
二者相与(&)
00000000 00000000 00000000 00001000 = 8
....
/*返回 __bytes 大小的chunk块位于 free-list 中的编号*/
static size_t _S_freelist_index(size_t __bytes) {
return (((__bytes) + (size_t)_ALIGN-1)/(size_t)_ALIGN - 1);
}
(((__bytes) + (size_t)_ALIGN-1)/(size_t)_ALIGN - 1)
: ((__bytes + 7) / 8) -1
最后的-1:因为这个是计算 chunk块 在 free-list数组中下标的位置,所以-1;