Genellikle olarak bilinen likely
ve unlikely
makrolar derleyiciye if
genellikle bir girilip atlanmayacağını belirler. Bunu kullanmak bazı (oldukça küçük) performans iyileştirmeleriyle sonuçlanır.
Onları son zamanlarda kullanmaya başladım ve bu tür ipuçlarının ne sıklıkta kullanılması gerektiğinden emin değilim. Şu anda if
genellikle olarak işaretlenmiş hata denetimi s ile kullanıyorum unlikely
. Örneğin:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Tamam görünüyor, ancak hata kontrolü if
oldukça sık ve sonuçta adı geçen makroların kullanımı.
Benim sorum şu, her hata kontrolünde çok fazla likely
ve unlikely
makro var if
mı?
Biz oradayken, başka hangi yerlerde sıkça kullanılıyorlar?
Şu anki kullanımımda, gerçek zamanlı alt sistemden soyutlama yapan bir kütüphanede bulunuyor, bu nedenle programlar RTAI, QNX ve diğerleri arasında taşınabilir hale gelecekti. Bununla birlikte, işlevlerin çoğu oldukça küçüktür ve doğrudan bir veya iki başka işlevi çağırır. Birçoğu bile static inline
işlevlerdir.
Yani, her şeyden önce, profil oluşturabileceğim bir uygulama değil. Bağımsız bir uygulama değil, bir kütüphane olduğu için "şişe boyunlarını tanımlamak" mantıklı değildir.
İkincisi, sanki "Bunun pek olası olmadığını biliyorum, derleyiciye de söyleyebilirim" gibi. Aktif olarak optimize etmeye çalışmıyorum if
.
likely
ve unlikely
var olur ve ne yaparlar. Onları ne zaman ve nerede kullanmanın en iyisi olduğunu önerecek hiçbir şey bulamadım.