Je vois des types de données u8 u16 u32 u64 utilisés dans le code du noyau. Et je me demande pourquoi est-il nécessaire d'utiliser u8
ou u16
ou u32
ou u64
et pas unsigned int
?
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.
Pour ce qui est de u8
contre uint8_t
, c'est simplement parce que Linux est antérieur à <stdint.h>
étant disponible en C, qui est techniquement un C99, mais d'après mon expérience, il est disponible sur la plupart des compilateurs modernes, même dans leurs modes ANSI-C/C89.
Ajouter mes 10 cents à cette réponse :
u64
signifie une valeur 'non signée 64 bits', donc, selon l'architecture où le code s'exécutera/sera compilé, il doit être défini différemment pour avoir réellement une longueur de 64 bits.
Par exemple, sur une machine x86, un unsigned long
est 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
a une longueur de 32 bits, donc u32
pour cette machine pourrait être défini comme suit:
typedef unsigned int u32;
Vous trouverez généralement la déclaration typedef
pour ces types sur un types.h
fichier qui correspond à l'architecture vers laquelle vous compilez votre source.