Jadi alasan untuk typedef
: tipe data primitif adalah untuk mengabstraksi representasi tingkat rendah dan membuatnya lebih mudah untuk dipahami ( uint64_t
bukan long long
tipe, yaitu 8 byte).
Namun, ada uint_fast32_t
yang memiliki kesamaan typedef
dengan uint32_t
. Akankah menggunakan versi "cepat" membuat program lebih cepat?
Jawaban:
int
mungkin sekecil 16 bit pada beberapa platform. Ini mungkin tidak cukup untuk aplikasi Anda.uint32_t
tidak dijamin ada. Merupakan opsionaltypedef
bahwa implementasi harus menyediakan iff yang memiliki tipe integer yang tidak bertanda tangan persis 32-bit. Beberapa memiliki byte 9-bit misalnya, jadi mereka tidak memiliki fileuint32_t
.uint_fast32_t
menyatakan maksud Anda dengan jelas: ini adalah jenis setidaknya 32 bit yang terbaik dari sudut pandang kinerja.uint_fast32_t
sebenarnya mungkin 64 bit. Terserah implementasinya.Apa yang Anda lihat bukanlah standar. Ini adalah implementasi tertentu (BlackBerry). Jadi Anda tidak bisa menyimpulkan dari sana bahwa
uint_fast32_t
selalu sama denganuint32_t
.Lihat juga:
Arsitektur eksotis yang menjadi perhatian komite standar .
Pandangan pragmatis saya berdasarkan opini jenis integer di C dan C ++ .
sumber
uint_least32_t
juga, yang samauint_fast32_t
kecuali itu lebih menyukai penyimpanan yang lebih kecil daripada kecepatan.Perbedaannya terletak pada ketepatan dan ketersediaannya.
The doc sini mengatakan:
Dan
Jadi perbedaannya cukup jelas yaitu
uint32_t
jenis yang memiliki bit persis32
, dan implementasi harus menyediakannya hanya jika ia memiliki jenis dengan persis 32 bit, dan kemudian dapat mengetikkan jenis itu sebagaiuint32_t
. Artinya,uint32_t
mungkin atau mungkin tidak tersedia .Di sisi lain,
uint_fast32_t
adalah tipe yang memiliki setidaknya 32 bit, yang juga berarti, jika sebuah implementasi dapat mengetikefuint32_t
seolah-uint_fast32_t
olah menyediakanuint32_t
. Jika tidak tersediauint32_t
, makauint_fast32_t
bisa menjadi typedef jenis apa pun yang memiliki setidaknya32
bit.sumber
uint32_t
tepat 32-bit di semua sistem (jika ada), yang mungkin tidak lebih cepat dibandingkan dengan yang memiliki, katakanlah, 64-bit.uint_fast32_t
di sisi lain setidaknya 32 bit, bahkan bisa 64-bit.uint16_t x;
disimpan dalam register 32-bit di ARM7-TDMI, kodex++;
mungkin perlu dievaluasi sebagaix=((x+1)<<16)>>16);
. Pada kompiler untuk platform itu,uint_fast16_t
kemungkinan besar akan didefinisikan sebagai sinonimuint32_t
untuk menghindari itu.[u]int_(fast|least)N_t
tidak juga opsional? Tentunya tidak semua arsitektur dibutuhkan oleh Standard untuk mendukung tipe primitif setidaknya 64 bit? Namun kata-kata untukstdint.h
menyiratkan bahwa mereka harus. Tampaknya aneh bagi saya bahwa kami telah menegakkannya sejak 1999, beberapa tahun sebelum komputasi 64-bit menjadi arus utama - untuk tidak mengatakan apa-apa tentang kelambatan di belakang (dalam banyak kasus masih saat ini) dari arsitektur yang disematkan. Ini tampak seperti pengawasan besar bagi saya.Saat kamu
#include inttypes.h
dalam program Anda, Anda mendapatkan akses ke banyak cara berbeda untuk mewakili bilangan bulat.Tipe uint_fast * _t mendefinisikan tipe tercepat untuk mewakili sejumlah bit.
Pikirkan seperti ini: Anda mendefinisikan variabel tipe
short
dan menggunakannya beberapa kali dalam program, yang benar-benar valid. Namun, sistem yang sedang Anda kerjakan mungkin bekerja lebih cepat dengan nilai tipeint
. Dengan mendefinisikan variabel sebagai tipeuint_fast*t
, komputer hanya memilih representasi paling efisien yang dapat dikerjakannya.Jika tidak ada perbedaan antara representasi ini, maka sistem akan memilih salah satu yang diinginkannya, dan menggunakannya secara konsisten.
sumber
Perhatikan bahwa versi cepat bisa lebih besar dari 32 bit. Sementara int cepat akan cocok dengan baik di register dan disejajarkan dan sejenisnya: tetapi, itu akan menggunakan lebih banyak memori. Jika Anda memiliki array yang besar, program Anda akan lebih lambat karena lebih banyak hits cache memori dan bandwidth.
Saya tidak berpikir CPUS modern akan mendapatkan keuntungan dari fast_int32, karena umumnya tanda perluasan 32 hingga 64 bit dapat terjadi selama instruksi pemuatan dan gagasan bahwa ada format bilangan bulat 'asli' yang lebih cepat adalah kuno.
sumber