为什么在内核编程中使用 u8 u16 u32 u64 而不是 unsigned int

why is u8 u16 u32 u64 used instead of unsigned int in kernel programming

我看到内核代码中使用了 u8 u16 u32 u64 数据类型。我想知道为什么需要使用 u8u16u32u64 而不是 unsigned int

通常在靠近硬件工作或试图控制数据结构的 size/format 时,您需要精确控制整数的大小。

至于 u8uint8_t,这仅仅是因为 Linux 早于 <stdint.h> 在 C 中可用,这在技术上是 C99 主义,但在我的即使在其 ANSI-C / C89 模式下,大多数现代编译器都可以获得经验。

将我的 10 美分加到 :

u64 表示 'unsigned 64 bits' 值,因此,根据代码将 run/be 编译的体系结构,必须对其进行不同的定义才能真正达到 64 位长。

例如,在 x86 机器上,unsigned long 是 64 位长,因此该机器的 u64 可以定义如下:

typedef unsigned long u64;

u32也是如此。在 x86 机器上,unsigned int 是 32 位长,因此该机器的 u32 可以定义如下:

typedef unsigned int u32;

您通常会在 types.h 文件中找到这些类型的 typedef 声明,该文件对应于您将源代码编译到的架构。