XINU OS - 理解 roundmb 函数

XINU OS - Understanding roundmb function

我正在研究XINU OS,偶然发现了这个简单的一行函数。是否可以解释这个函数是如何工作的并将 x 舍入到最接近的块大小以进行内存分配?查询过于简单请不要介意

我也很疑惑为什么要改成char指针

/*----------------------------------------------------------------------

*roundmb, truncmb - round or truncate address to memory block size

*----------------------------------------------------------------------
*/

    #define roundmb(x) (char *)( (7 + (uint32)(x)) & (~7) )

Link 到完整的 XINU 代码: https://github.com/xinu-os/xinu/blob/master/include/memory.h

所以这四舍五入到下一个因子 8。

打开传入的值被转换为数字,因此我们可以对其进行适当的数学运算。

第一个实际步骤 x + 7。这会将值推高,所以我们只需要向下舍入。

0 -> 7
1 -> 8
2 -> 10
7 -> 14
8 -> 15
9 -> 16

~7 是位掩码,0xFFFFFFF8。在处理小数字时,我会简化并使用 0xF8。

然后将添加的值与位掩码组合。基本上我们删除最后三位。

0 -> 7  -> 0
1 -> 8  -> 8
2 -> 10 -> 8
7 -> 14 -> 8
8 -> 15 -> 8
9 -> 16 -> 16

然后将此数字转换为内存地址,撤消初始的 uint 转换。因为您正在处理内存块并且可能会访问其中的数据,所以将它作为指针更有意义。