Makro likely
dan unlikely
makro sering dikenal membantu kompiler mengetahui apakah suatu if
biasanya akan dimasukkan atau dilewati. Menggunakannya menghasilkan beberapa peningkatan kinerja (agak kecil).
Saya mulai menggunakannya baru-baru ini, dan saya tidak yakin seberapa sering petunjuk seperti itu digunakan. Saat ini saya menggunakannya dengan pengecekan kesalahan if
, yang biasanya ditandai sebagai unlikely
. Sebagai contoh:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Tampaknya baik-baik saja, tetapi pengecekan kesalahan if
terjadi cukup sering dan akibatnya penggunaan makro tersebut.
Pertanyaan saya adalah, apakah terlalu banyak untuk dimiliki likely
dan unlikely
makro pada setiap pemeriksaan kesalahan if
?
Sementara kita berada di sana, tempat lain apa yang sering mereka gunakan?
Dalam penggunaan saya saat ini di perpustakaan yang membuat abstraksi dari subsistem real-time, jadi program akan menjadi portabel antara RTAI, QNX dan lainnya. Yang mengatakan, sebagian besar fungsi agak kecil dan langsung memanggil satu atau dua fungsi lainnya. Banyak yang bahkan static inline
berfungsi.
Jadi, pertama-tama, ini bukan aplikasi yang bisa saya profil. Tidak masuk akal untuk "mengidentifikasi leher botol" karena itu adalah perpustakaan, bukan aplikasi mandiri.
Kedua, ini seperti "Saya tahu ini tidak mungkin, saya mungkin juga mengatakannya kepada kompiler". Saya tidak secara aktif mencoba mengoptimalkan if
.
likely
dan unlikely
ada dan apa yang mereka lakukan. Saya tidak menemukan apa pun yang benar-benar menyarankan kapan dan di mana cara terbaik untuk menggunakannya.