GNU/Linux >> Belajar Linux >  >> Linux

mengapa u8 u16 u32 u64 digunakan sebagai pengganti unsigned int dalam pemrograman kernel

Menambahkan 10 sen saya ke jawaban ini:

u64 berarti nilai 'unsigned 64 bits', jadi, bergantung pada arsitektur tempat kode akan dijalankan/dikompilasi, kode harus didefinisikan secara berbeda agar benar-benar sepanjang 64 bit.

Misalnya, pada mesin x86, sebuah unsigned long panjangnya 64 bit, jadi u64 untuk mesin itu dapat didefinisikan sebagai berikut:

typedef unsigned long u64;

Hal yang sama berlaku untuk u32 . Pada mesin x86, unsigned int panjangnya 32 bit, jadi u32 untuk mesin itu dapat didefinisikan sebagai berikut:

typedef unsigned int u32;

Biasanya Anda akan menemukan typedef deklarasi untuk jenis ini pada types.h file yang sesuai dengan arsitektur tempat Anda mengompilasi sumber Anda.


Sering kali saat bekerja dekat dengan perangkat keras atau saat mencoba mengontrol ukuran/format struktur data, Anda harus memiliki kontrol yang tepat atas ukuran bilangan bulat Anda.

Adapun u8 vs uint8_t , ini hanya karena Linux mendahului <stdint.h> tersedia di C, yang secara teknis adalah C99-isme, tetapi menurut pengalaman saya tersedia di sebagian besar kompiler modern bahkan dalam mode ANSI-C / C89 mereka.


Linux
  1. Mengapa `sementara Ifs=Read` Sering Digunakan, Alih-alih `ifs=; Saat Baca..`?

  2. Mengapa Kernel Menjatuhkan Paket?

  3. Linux – Mengapa Kernel Tidak Dapat Menjalankan Init?

  1. Mengapa Nomor Drive/partisi Masih Digunakan?

  2. Mengapa beberapa pemrogram kernel menggunakan goto alih-alih simple while loops?

  3. mengapa saya tidak bisa mencocokkan sekejap dengan uptime?

  1. Di kernel linux 2.6.26, saya menemukan #define atom_read(v) ((v)->counter + 0), mengapa +0?

  2. Mengapa kami memiliki 3 jenis pilihan-X di LINUX?

  3. Mengapa UASP tidak digunakan