GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué se usa u8 u16 u32 u64 en lugar de int sin firmar en la programación del kernel?

Agregando mis 10 centavos a esta respuesta:

u64 significa un valor de '64 bits sin firmar', por lo que, dependiendo de la arquitectura en la que se ejecutará/se compilará el código, debe definirse de manera diferente para que realmente tenga una longitud de 64 bits.

Por ejemplo, en una máquina x86, un unsigned long tiene una longitud de 64 bits, por lo que u64 para esa máquina podría definirse de la siguiente manera:

typedef unsigned long u64;

Lo mismo aplica para u32 . En una máquina x86, unsigned int tiene una longitud de 32 bits, por lo que u32 para esa máquina podría definirse de la siguiente manera:

typedef unsigned int u32;

Generalmente encontrarás el typedef declaración para estos tipos en un types.h archivo que corresponde a la arquitectura en la que está compilando su fuente.


A menudo, cuando se trabaja cerca del hardware o cuando se intenta controlar el tamaño/formato de una estructura de datos, es necesario tener un control preciso del tamaño de los números enteros.

En cuanto a u8 contra uint8_t , esto se debe simplemente a que Linux es anterior a <stdint.h> está disponible en C, que técnicamente es un C99-ism, pero en mi experiencia está disponible en la mayoría de los compiladores modernos, incluso en sus modos ANSI-C/C89.


Linux
  1. ¿Por qué un largo retraso después de que no se encuentra el comando?

  2. ¿Por qué el kernel soltaría paquetes?

  3. Linux:¿por qué el kernel no puede ejecutar Init?

  4. ¿Por qué se sigue utilizando el número de unidad/partición?

  5. ¿Por qué algunos programadores del kernel usan goto en lugar de bucles while simples?

Por qué uso exa en lugar de ls en Linux

¿Qué es una máquina virtual y por qué usarla?

Linux vs Mac OS:15 razones por las que usar Linux en lugar de Mac OS

¿Por qué la memoria compartida del kernel es 0 en Ubuntu 12.04?

¿Por qué se tarda tanto en detectar una memoria USB?

¿Por qué está restringida la edición de core_pattern?