web-dev-qa-db-fra.com

pourquoi u8 u16 u32 u64 est-il utilisé à la place de int non signé dans la programmation du noyau

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?

14
user966588

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.

17
Brian McFarland

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.

2
Alexandre Schmidt