Makro likelydan unlikelymakro sering dikenal membantu kompiler mengetahui apakah suatu ifbiasanya 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 ifterjadi cukup sering dan akibatnya penggunaan makro tersebut.
Pertanyaan saya adalah, apakah terlalu banyak untuk dimiliki likelydan unlikelymakro 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 inlineberfungsi.
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.
likelydan unlikelyada dan apa yang mereka lakukan. Saya tidak menemukan apa pun yang benar-benar menyarankan kapan dan di mana cara terbaik untuk menggunakannya.