XINU OS - 了解roundmb函数

问题描述 投票:-1回答:1

我正在研究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

c operating-system dynamic-memory-allocation
1个回答
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强制转换。因为您正在处理内存块并且可能正在访问它们内部的数据,所以将它作为指针更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.