15 c linux kernel linux-device-driver
我看到内核代码中使用的u8 u16 u64 u64数据类型.我想知道为什么会出现需要使用u8或u16或u32或u64不unsigned int?
Bri*_*and 19
通常,当您在硬件附近工作或尝试控制数据结构的大小/格式时,您需要精确控制整数的大小.
至于u8vs uint8_t,这仅仅是因为Linux早<stdint.h>于C语言可用,这在技术上是C99主义,但根据我的经验,大多数现代编译器都可以使用它们的ANSI-C/C89模式.
分享一下我最近了解到的这个问题。
我们需要这种明确大小的类型(例如 u32)的原因是普通 C 数据类型在所有体系结构上的大小并不相同。
下图显示了长整数和指针在不同平台上具有不同的大小。
这样,u32就可以保证你得到4个字节长的整数。
将我的 10 美分加到这个答案中:
u64 表示“无符号 64 位”值,因此,根据代码将运行/编译的体系结构,必须对其进行不同定义才能真正达到 64 位长。
例如,在 x86 机器上, anunsigned long是 64 位长,因此u64对于该机器可以定义如下:
typedef unsigned long u64;
这同样适用于u32。在 x86 机器上,unsigned int长度为 32 位,因此u32对于该机器可以定义如下:
typedef unsigned int u32;
您通常会typedef在types.h文件中找到这些类型的声明,该文件与您将源代码编译到的体系结构相对应。
| 归档时间: |
|
| 查看次数: |
61019 次 |
| 最近记录: |