GNU/Linux >> Linux の 問題 >  >> Linux

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

この回答に私の 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 でのこれらの型の宣言 ソースをコンパイルするアーキテクチャに対応するファイル。


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

u8 に関しては vs uint8_t 、これは単純に Linux が <stdint.h> よりも古いためです これは技術的には C99 主義ですが、私の経験では、ANSI-C / C89 モードであっても最新のコンパイラのほとんどで利用できます。


Linux
  1. コマンドが見つからないのになぜ長い遅延があるのですか?

  2. カーネルがパケットをドロップするのはなぜですか?

  3. ドライブ/パーティション番号がまだ使用されているのはなぜですか?

  1. 一部のカーネル プログラマーが単純な while ループの代わりに goto を使用するのはなぜですか?

  2. Linux で select が使用される理由

  3. LINUX に 3 種類の X セレクションがあるのはなぜですか?

  1. UASP が使用されない理由

  2. USB スティックの検出に時間がかかるのはなぜですか?

  3. core_pattern の編集が制限されているのはなぜですか?