GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum wird in der Kernel-Programmierung u8 u16 u32 u64 anstelle von unsigned int verwendet?

Ich füge dieser Antwort meine 10 Cent hinzu:

u64 bedeutet einen 64-Bit-Wert ohne Vorzeichen. Je nach Architektur, auf der der Code ausgeführt/kompiliert wird, muss er anders definiert werden, um wirklich 64 Bit lang zu sein.

Auf einem x86-Rechner beispielsweise ein unsigned long ist 64 Bit lang, also u64 für diese Maschine könnte wie folgt definiert werden:

typedef unsigned long u64;

Gleiches gilt für u32 . Auf einem x86-Rechner unsigned int ist 32 Bit lang, also u32 für diese Maschine könnte wie folgt definiert werden:

typedef unsigned int u32;

In der Regel finden Sie den typedef Deklaration für diese Typen auf einem types.h Datei, die der Architektur entspricht, für die Sie Ihren Quellcode kompilieren.


Wenn Sie in der Nähe der Hardware arbeiten oder versuchen, die Größe/das Format einer Datenstruktur zu steuern, müssen Sie häufig die Größe Ihrer Ganzzahlen genau kontrollieren.

Wie bei u8 gegenüber uint8_t , das liegt einfach daran, dass Linux älter als <stdint.h> war in C verfügbar sein, was technisch gesehen ein C99-Ismus ist, aber meiner Erfahrung nach auf den meisten modernen Compilern sogar in ihren ANSI-C / C89-Modi verfügbar ist.


Linux
  1. Warum wird `while Ifs=Read` so oft verwendet, anstatt `ifs=; Während Read..`?

  2. Warum eine lange Verzögerung, nachdem der Befehl nicht gefunden wurde?

  3. Warum würde der Kernel Pakete fallen lassen?

  4. Warum wird die Laufwerks-/Partitionsnummer immer noch verwendet?

  5. Warum verwenden einige Kernel-Programmierer goto statt einfacher While-Schleifen?

Warum ich unter Linux exa anstelle von ls verwende

C-Programmier-Tutorial 4 - Variablen und Speicher

Was ist eine virtuelle Maschine und warum sollte man sie verwenden?

Linux vs. Mac OS:15 Gründe, warum Sie Linux anstelle von Mac OS verwenden sollten

Warum heißt meine Ethernet-Schnittstelle enp0s10 statt eth0?

Warum ist die Bearbeitung von core_pattern eingeschränkt?