Linux内核中ALIGN()和round_up()宏的区别

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

我最近正在探索Linux内核内部的对齐机制,但是,我对两个宏ALIGN()round_up()感到困惑,它们具有不同的实现,但目的相同(据我的理解),这是2 ^ n字节四舍五入。

我很好奇他们需要两个具有不同impl但输出相同的宏的原因。

而且,它们都在同一个头文件include/linux/kernel.h中。

Impl of round_up()

round_up()

#define __round_mask(x, y) ((__typeof__(x))((y)-1)) #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)

Impl of ALIGN()

谢谢!

c linux-kernel memory-alignment
1个回答
0
投票

它们不再位于同一标头中。 #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) #define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) 现在是UAPI的一部分。但我猜主要区别是:

[a)

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