我在内核代码中看到了u8 u16 u32 u64数据类型。我想知道为什么需要使用u8
或u16
或u32
或u64
而不是unsigned int
?
答案 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
声明,该文件对应于您要将源代码编译到的体系结构。