首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XINU理解圆OS函数

XINU理解圆OS函数
EN

Stack Overflow用户
提问于 2018-10-18 23:36:46
回答 1查看 223关注 0票数 1

我正在学习XINU,并遇到了这个简单的单行函数.是否可以解释这个函数是如何工作的,并将x舍入到最近的块大小以进行内存分配?如果查询太简单,请不要介意。

我也很困惑,为什么要将它更改为字符指针。

代码语言:javascript
复制
/*----------------------------------------------------------------------

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 00:08:15

因此,这是下一个因子8。

打开传入的值被转换为一个数字,所以我们可以对它进行适当的数学计算。

第一个真正的步骤x+ 7,这推动了值的上升,所以我们只需要舍入。

代码语言:javascript
复制
0 -> 7
1 -> 8
2 -> 10
7 -> 14
8 -> 15
9 -> 16

~7是位掩码,0xFFFFFFFF8。我会简化和使用0xF8时,处理它的小数字。

然后将附加值与位掩码组合起来。基本上我们放弃了最后三位。

代码语言:javascript
复制
0 -> 7  -> 0
1 -> 8  -> 8
2 -> 10 -> 8
7 -> 14 -> 8
8 -> 15 -> 8
9 -> 16 -> 16

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52883965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档