GNU/Linux >> Tutoriels Linux >  >> Linux

pourquoi u8 u16 u32 u64 est-il utilisé à la place d'un entier non signé dans la programmation du noyau

J'ajoute mes 10 centimes à cette réponse :

u64 signifie une valeur '64 bits non signés', donc, selon l'architecture où le code sera exécuté/compilé, il doit être défini différemment afin d'avoir une longueur réelle de 64 bits.

Par exemple, sur une machine x86, un unsigned long est long de 64 bits, donc u64 pour cette machine pourrait être défini comme suit :

typedef unsigned long u64;

Il en va de même pour u32 . Sur une machine x86, unsigned int est long de 32 bits, donc u32 pour cette machine pourrait être défini comme suit :

typedef unsigned int u32;

Vous trouverez généralement le typedef déclaration pour ces types sur un types.h qui correspond à l'architecture vers laquelle vous compilez votre source.


Souvent, lorsque vous travaillez à proximité du matériel ou lorsque vous essayez de contrôler la taille/le format d'une structure de données, vous devez avoir un contrôle précis de la taille de vos entiers.

Comme pour u8 contre uint8_t , c'est simplement parce que Linux est antérieur à <stdint.h> étant disponible en C, qui est techniquement un C99-ism, mais d'après mon expérience, il est disponible sur la plupart des compilateurs modernes, même dans leurs modes ANSI-C / C89.


Linux
  1. Tutoriel de programmation en C 4 - Variables et mémoire

  2. Pourquoi `while Ifs=Read` est-il utilisé si souvent, au lieu de `ifs=; Pendant la lecture..` ?

  3. Pourquoi un long délai après la commande introuvable ?

  4. Pourquoi le noyau lâcherait-il des paquets ?

  5. Pourquoi certains programmeurs du noyau utilisent-ils goto au lieu de simples boucles while ?

Pourquoi j'utilise exa au lieu de ls sous Linux

Qu'est-ce qu'une machine virtuelle et pourquoi l'utiliser ?

Linux - Pourquoi le noyau ne peut-il pas exécuter Init ?

Pourquoi le numéro de lecteur/partition est-il toujours utilisé ?

Linux vs Mac OS :15 raisons d'utiliser Linux au lieu de Mac OS

Pourquoi mon interface Ethernet s'appelle-t-elle enp0s10 au lieu de eth0 ?