GNU/Linux >> Linux Esercitazione >  >> Linux

perché u8 u16 u32 u64 è usato invece di unsigned int nella programmazione del kernel

Aggiungendo i miei 10 centesimi a questa risposta:

u64 indica un valore di '64 bit senza segno', quindi, a seconda dell'architettura in cui il codice verrà eseguito/compilato, deve essere definito in modo diverso per essere realmente lungo 64 bit.

Ad esempio, su una macchina x86, un unsigned long è lungo 64 bit, quindi u64 per quella macchina potrebbe essere definito come segue:

typedef unsigned long u64;

Lo stesso vale per u32 . Su una macchina x86, unsigned int è lungo 32 bit, quindi u32 per quella macchina potrebbe essere definito come segue:

typedef unsigned int u32;

Generalmente troverai typedef dichiarazione per questi tipi su un types.h file che corrisponde all'architettura in cui stai compilando il tuo codice sorgente.


Spesso quando si lavora vicino all'hardware o quando si tenta di controllare la dimensione/formato di una struttura dati è necessario avere un controllo preciso della dimensione dei numeri interi.

Per quanto riguarda u8 rispetto a uint8_t , questo semplicemente perché Linux è precedente a <stdint.h> essendo disponibile in C, che tecnicamente è un C99-ismo, ma nella mia esperienza è disponibile sulla maggior parte dei compilatori moderni anche nelle loro modalità ANSI-C / C89.


Linux
  1. Linux:perché il kernel non può eseguire Init?

  2. Perché il numero di unità/partizione è ancora utilizzato?

  3. Nel kernel linux 2.6.26, ho trovato #define atomic_read(v) ((v)->counter + 0), perché +0?

  4. Perché UASP non viene utilizzato

  5. Perché ci vuole così tanto tempo per rilevare una chiavetta USB?

Perché uso exa invece di ls su Linux

Che cos'è una macchina virtuale e perché usarla?

Linux vs Mac OS:15 motivi per utilizzare Linux invece di Mac OS

Perché abbiamo 3 tipi di selezioni X in LINUX?

Perché la memoria condivisa del kernel è 0 su Ubuntu 12.04?

Perché la mia interfaccia ethernet si chiama enp0s10 invece di eth0?