Często znane jako likelyi unlikelymakra pomagają kompilatorowi wiedzieć, czy ifzwykle będzie wprowadzane czy pomijane. Używanie go powoduje pewne (raczej niewielkie) ulepszenia wydajności.
Zacząłem ich używać niedawno i nie jestem pewien, jak często należy korzystać z takich wskazówek. Obecnie używam go do sprawdzania błędów if, które zwykle są oznaczone jako unlikely. Na przykład:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Wydaje się to w porządku, ale sprawdzanie błędów ifzdarza się dość często iw konsekwencji użycie wspomnianych makr.
Moje pytanie brzmi, czy to zbyt wiele, aby mieć likelyi unlikelymakra na każdym Sprawdzanie błędów if?
Skoro już tu jesteśmy, jakie inne miejsca są często używane?
W moim obecnym użyciu znajduje się w bibliotece, która dokonuje abstrakcji z podsystemu czasu rzeczywistego, więc programy stałyby się przenośne między RTAI, QNX i innymi. To powiedziawszy, większość funkcji jest raczej niewielka i bezpośrednio wywołuje jedną lub dwie inne funkcje. Wiele z nich to nawet static inlinefunkcje.
Przede wszystkim nie jest to aplikacja, którą mógłbym profilować. Identyfikacja „wąskich gardeł” nie ma sensu, ponieważ jest to biblioteka, a nie samodzielna aplikacja.
Po drugie, jest to coś w rodzaju „wiem, że to mało prawdopodobne, równie dobrze mogę to powiedzieć kompilatorowi”. Nie próbuję aktywnie optymalizować if.
likelyi unlikelyistnieje i co robią. Nie znalazłem niczego, co faktycznie sugerowałoby, kiedy i gdzie najlepiej ich używać.