Open alicemare opened 5 years ago
在看一个内存管理malloc的实现的时候 要求内存分配做到4k对齐,也就是要求size是8的倍数 所以我们可以实现为:
malloc
size_t align8(size_t s) { if(s & 0x7 == 0) return s; return ((s >> 3) + 1) << 3; }
如果某个数是8的倍数,那么它模8之后,余下的三位范围是二进制的000到111,而7正好是111,所以只要让这个数与7按位求与,结果是0,那么就代表是8的倍数 否则,右移3位,加上一,得到这个数除以8之后大于这个数的最小整数,再左移8位,也就得到了大于这个数且最小的8的倍数
在看一个内存管理
malloc
的实现的时候 要求内存分配做到4k对齐,也就是要求size是8的倍数 所以我们可以实现为:如果某个数是8的倍数,那么它模8之后,余下的三位范围是二进制的000到111,而7正好是111,所以只要让这个数与7按位求与,结果是0,那么就代表是8的倍数 否则,右移3位,加上一,得到这个数除以8之后大于这个数的最小整数,再左移8位,也就得到了大于这个数且最小的8的倍数