web-dev-qa-db-ja.com

カーネルプログラミングでunsigned intの代わりにu8 u16 u32 u64が使用される理由

カーネルコードでu8 u16 u32 u64データ型が使用されています。そして、なぜu8またはu16またはu32またはu64ではなくunsigned intを使用する必要があるのでしょうか。

14
user966588

多くの場合、ハードウェアの近くで作業するとき、またはデータ構造のサイズ/フォーマットを制御しようとするとき、整数のサイズを正確に制御する必要があります。

はどうかと言うと u8 vs uint8_t、これは単純にLinuxが<stdint.h>技術的にはC99-ismであるCで使用可能ですが、私の経験では、ANSI-C/C89モードでもほとんどの最新のコンパイラで使用可能です。

17
Brian McFarland

この回答 に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ファイルにあります。

2