カーネルコードでu8 u16 u32 u64データ型が使用されています。そして、なぜu8
またはu16
またはu32
またはu64
ではなくunsigned int
を使用する必要があるのでしょうか。
多くの場合、ハードウェアの近くで作業するとき、またはデータ構造のサイズ/フォーマットを制御しようとするとき、整数のサイズを正確に制御する必要があります。
はどうかと言うと u8
vs uint8_t
、これは単純にLinuxが<stdint.h>
技術的にはC99-ismであるCで使用可能ですが、私の経験では、ANSI-C/C89モードでもほとんどの最新のコンパイラで使用可能です。
この回答 に10セントを追加します:
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
ファイルにあります。