round_up()函数将x和y进行运算,并将结果向上舍入到最接近大于或等于y的倍数。具体过程如下: 1.将x加上(y - 1)。 2.将结果除以y。 3.将结果乘以y。 通过这样的处理,可以确保最终得到的数值是大于或等于y的倍数。 以下是一个使用round_up()函数的示例: ```c int size = 13; int alignment = 8; ...
1#definePAGE_ROUND_DOWN(x) (((ULONG_PTR)(x)) & (~(PAGE_SIZE-1)))2#definePAGE_ROUND_UP(x) ( (((ULONG_PTR)(x)) + PAGE_SIZE-1) & (~(PAGE_SIZE-1)) ) TheROUND_UPmacro is relying on integer division to get the job done. It will only work if both parameters are integers....
include/linux/bitops.h#define BITS_PER_BYTE 8#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) BITS_TO_LONGS通过DIV_ROUND_UP宏完成。DIV_ROUND_UP根据nr参数计算至少需要几个long型才能满足当前位图的需求。不知道为什么Linux不使用char型,这样不是更节约内存吗?显然DECLARE_...
这个DIV_ROUND_UP(nr, d)宏的作用是:如果定义了一个: unsinged long name[128]用作位图的话,则 d = 32bits, 在假设 nr = 128*32 - 1,则n在数组中的下标可以通过 nr / 32 = 127来计算出来,而实际的数组name中有128个元素,所有 DIV_ROUND_UP()函数的作用是将比特位与数组的大小关联起来,可以通过 ...
6.round_up 和 round_down 宏函数:这些宏函数用于将一个值上/下舍入到最接近的指定倍数。它们通常用于内存分配和对齐等场景,确保对齐和大小的正确性。7.__stringify 宏:这个宏用于将宏参数转换为字符串。它通过两个宏的嵌套定义实现。这在内核中用于调试和日志记录等目的。8.BUILD_BUG_ON_ZERO 宏:这个宏...
Linux常用内核宏,计算向向上取整的商由于两数相除,默认是向下取整,而这里是向上取整数#defineDIV_ROUND_UP(n,d)(((n)+(d)-1)/(d))参考:https://www.cnblogs.com/cmembd/p/3493597.html计算向下取整的整数倍数如:m=5n=3,3的整数倍有3,6,9,12,但是对于5向下取整为3
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) 因此,例如DECLARE_BITMAP(my_bitmap, 64)将产生: >>> (((64) + (64) - 1) / (64)) 与: unsigned long my_bitmap[1]; 在能够声明一个位数组之后,我们便可以使用它了。
内核提供的另一个宏DIV_ROUND_UP用来对除法的结果进行圆整,也即总是取大于n并接近n的那个数整除d后的结果。DIV_ROUND_UP类似于roundup,只是少了乘的动作,原理也是相同的。 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) DIV_ROUND_UP的处理结果如下: ...
DIV_ROUND_CLOSEST_ULL(x, divisor)的作用是将一个64位无符号整数x除以一个32位无符号整数divisor并将结果四舍五入。其首先定义了一个临时变量__d,用于存储参数divisor。然后,将被除数x加上除数divisor的一半,这样可以将被除数向上舍入到下一个整数。接着调用do_div函数,该函数将_tmp除以__d并返回余数,而商则...
end =round_up(end, PMD_SIZE);if(start >= end)return;kernel_ident_mapping_init(&mapping_info, (pgd_t*)top_level_pgt, start, end); } round_up``round_down函数用来矫正开始和结束的地址偏移为2mb. add_identity_map在最后调用kernel_ident_mapping_init.参数为已经初始化好的mapping_info实例....