【发布时间】:2016-03-13 22:52:04
【问题描述】:
我试图理解实现 malloc 的内存分配器的代码,但偶然发现了这个宏
// get the size of the block from header
#define GET_SIZE(p) (GET(p) & ~0x7)
评论清楚地说明了它的作用,但我无法理解它的作用或工作原理。谁能详细解释一下?
【问题讨论】:
-
它提取除 get(p) 返回的值的最右边 3 个二进制数字之外的所有内容。大约可以更快地完成 (p) % 8。
-
@ArifBurhan 那么 ~0x7 到底做了什么?我的意思是返回最右边的 3 个数字的逻辑是什么?
-
@ArifBurhan “做得更快” - 如果您使用的是 1970 年代的编译器,也许
-
@ArifBurhan 不,它们不相同。使用
for (x = 0;;++x):x & ~0x7产生 [0 重复 8 次]、[8 重复 8 次]、[16 重复 8 次]、24 重复 8 次],...但x % 8是 [0,1,2 ,3,4,5,6,7], [0,1,2,3,4,5,6,7], [0,1,2,3,4,5,6,7], [0 ,1,2,3,4,5,6,7], ...您可能错过了~