- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在研究XINU OS,偶然发现了这个简单的一行函数。是否可以解释这个函数是如何工作的并将 x 舍入到最接近的 block 大小以进行内存分配?如果查询过于简单,请不要介意。
我也很疑惑为什么要把它改成char指针。
/*----------------------------------------------------------------------
*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
最佳答案
所以这四舍五入到下一个因子 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 转换。因为您正在处理内存块并可能访问其中的数据,所以将其作为指针更有意义。
关于c - XINU OS - 理解 roundmb 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883965/
我在研究XINU OS,偶然发现了这个简单的一行函数。是否可以解释这个函数是如何工作的并将 x 舍入到最接近的 block 大小以进行内存分配?如果查询过于简单,请不要介意。 我也很疑惑为什么要把它改
我需要你的帮助,我想改变 xinu (os) 的工作方式,这样它将接管中断 128 并控制 SYS_CALL,例如,而不是调用 send(pid, msg) 我将调用 sys_call(发送, pid
我有一个运行 xinu 的 beagle bone black 和一个在虚拟机上运行的 VM 中设置的开发环境。到目前为止,我已经能够在Xinu中编写Hello world shell命令。所以我对
我有一个给定的代码,在我看来该代码有问题:我在XINU下编译。 下一个变量是相关的: unsigned long ularray[]; int num; char str[100]; 有一个函数返回i
我是一名优秀的程序员,十分优秀!