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

时间:2015-06-17 15:50:31

标签: c linux kernel linux-device-driver

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

2 个答案:

答案 0 :(得分:15)

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

至于u8 vs uint8_t,这只是因为Linux早于<stdint.h>在C中可用,这在技术上是C99主义,但根据我的经验可用于大多数现代编译器甚至在ANSI-C / C89模式下。

答案 1 :(得分:2)

将我的10美分加到this answer

u64表示一个“无符号64位”值,因此,根据要在其中运行/编译代码的体系结构,必须对其进行不同定义,才能真正达到64位长。

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

typedef unsigned long u64;

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

typedef unsigned int u32;

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