warum ist die u8 u16 u32 u64 anstelle von unsigned int in der kernel-Programmierung
Ich sehe u8 u16 u32 u64 Daten-Typen benutzt wird, der im kernel-code. Und ich Frage mich, warum ist es verwenden müssen u8
oder u16
oder u32
oder u64
und nicht unsigned int
?
- Denn das wird nur die Zuordnung zu einer von Ihrer Liste. Und Sie können nicht sicher sein, welches.
- Ich habe meist gesehen die standard-typedefs
uint8_t
,uint16_t
, et al. - Ich habe linux/types.h enthalten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oft beim arbeiten nahe an der hardware oder wenn Sie versuchen, die Größe/das format eines Daten-Struktur, die Sie brauchen, um präzise Kontrolle über die Größe Ihrer zahlen.
Als für
u8
vsuint8_t
, das ist einfach, weil Linux vordatiert<stdint.h>
erhältlich in C, die ist technisch ein C99-ism, aber in meiner Erfahrung ist verfügbar auf den meisten Compilern, die selbst in ANSI-C /C89-Modi.u8
beinhaltet weniger Tippen 🙂U8
,u8
,uint8
,BYTE
,UINT8
undunt8_t
alle in der gleichen Datei. Sie können auch potenzielle Konflikte, die bis Ende generieren von Warnungen. Am häufigsten für die 32-und 64-bit-Typen, die möglicherweise mehrere gültige Möglichkeiten, um typedef Sie auf einer Plattform. Für neuen code, bitte, bitte, bitte, nur stick mit stdint.h-Typen :).u8
u16
etc im kernel-space mitlinux/types.h
. Iststdint.h
für user-space?uint8_t
usw.) in den kernel-Modus zu. Typdefinitionen für diese sind inlinux/types.h
als gut.u8
etc sind deine eigenen typedefs, dass Sie garantieren können, sind identisch mit den standard-diejenigen, wirst du in Ordnung sein obwohl. Als Gil sagte Hamilton, der kernel dieseHinzufügen meine 10 Cent zu diese Antwort:
u64
bedeutet, dass ein 'unsigned 64-bit Wert, so dass, abhängig von der Architektur, wo der code ausgeführt wird/werden kompiliert, es muss anders definiert werden, um auch wirklich 64 bit lang.Beispielsweise auf einem x86-Rechner, ein
unsigned long
ist 64 bits lang, sou64
für diese Maschine könnte wie folgt definiert:typedef unsigned long u64;
Gleiches gilt für
u32
. Auf einer x86-Maschine,unsigned int
ist 32 bits lang, sou32
für diese Maschine könnte wie folgt definiert:typedef unsigned int u32;
Werden Sie in der Regel finden die
typedef
Erklärung für diese Typen auf einetypes.h
- Datei, die entspricht die Architektur, die Sie kompilieren Sie die Quelle an.