XINU OS-了解Roundmb函数

时间:2018-10-18 23:36:46

标签: c operating-system dynamic-memory-allocation

我正在研究XINU OS,并遇到了这个简单的单行功能。是否可以解释此函数的工作原理,并将x舍入到最接近的块大小以进行内存分配?如果查询太简单,请不要介意。 我也很困惑为什么要将其更改为char指针。

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

* roundmb,truncmb-将地址舍入或截断为内存块大小

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

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

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

1 个答案:

答案 0 :(得分:1)

因此,此取整为下一个因子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强制转换。因为您正在处理内存块并可能访问其中的数据,所以将其用作指针更有意义。