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

新手上路,请多包涵

我看到内核代码中使用了 u8 u16 u32 u64 数据类型。 And I am wondering why is there need to use u8 or u16 or u32 or u64 and not unsigned int ?

原文由 user966588 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

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

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

原文由 Brian McFarland 发布,翻译遵循 CC BY-SA 3.0 许可协议

将我的 10 美分添加到 这个答案 中:

u64 表示“无符号 64 位”值,因此,根据运行/编译代码的架构,必须以不同方式定义它才能真正达到 64 位长。

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

typedef unsigned long u64;

这同样适用于 u32 。在 x86 机器上, unsigned int 长度为 32 位,因此该机器的 u32 可以定义如下:

typedef unsigned int u32;

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

原文由 Alexandre Schmidt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题