GNU/Linux >> Znalost Linux >  >> Linux

proč se v programování jádra používá u8 u16 u32 u64 místo unsigned int

K této odpovědi přidám svých 10 centů:

u64 znamená hodnotu 'unsigned 64 bits', takže v závislosti na architektuře, kde kód poběží/bude zkompilován, musí být definován odlišně, aby byl skutečně dlouhý 64 bitů.

Například na počítači x86 unsigned long je dlouhý 64 bitů, takže u64 pro tento stroj lze definovat takto:

typedef unsigned long u64;

Totéž platí pro u32 . Na počítači x86 unsigned int je dlouhý 32 bitů, takže u32 pro tento stroj lze definovat takto:

typedef unsigned int u32;

Obecně najdete typedef deklarace pro tyto typy na types.h soubor, který odpovídá architektuře, do které zdroj kompilujete.


Často, když pracujete blízko hardwaru nebo když se snažíte řídit velikost/formát datové struktury, potřebujete mít přesnou kontrolu nad velikostí vašich celých čísel.

Pokud jde o u8 vs uint8_t , je to jednoduše proto, že Linux předcházel <stdint.h> je k dispozici v C, což je technicky C99-ismus, ale podle mých zkušeností je k dispozici na většině moderních kompilátorů dokonce i v jejich režimech ANSI-C / C89.


Linux
  1. Proč dlouhé zpoždění poté, co příkaz nebyl nalezen?

  2. Proč by jádro zahazovalo pakety?

  3. Linux – Proč nemůže jádro spustit inicializaci?

  1. Proč se stále používá číslo disku/diskového oddílu?

  2. Proč někteří programátoři jádra používají goto místo jednoduchých smyček while?

  3. V linuxovém jádře 2.6.26 jsem našel #define atomic_read(v) ((v)->counter + 0), proč +0?

  1. Proč máme v LINUXu 3 typy X-výběrů?

  2. Proč se nepoužívá UASP

  3. Proč je sdílená paměť jádra na Ubuntu 12.04 0?