Le macro spesso conosciute come likely
e le unlikely
macro aiutano il compilatore a sapere se di if
solito verrà immesso o ignorato un. Usarlo comporta alcuni (piuttosto minori) miglioramenti delle prestazioni.
Ho iniziato a usarli di recente e non sono sicuro di quanto spesso debbano essere usati tali suggerimenti. Attualmente lo uso con controllo errori if
s, che di solito sono contrassegnati come unlikely
. Per esempio:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Sembra ok, ma il controllo degli errori if
avviene abbastanza spesso e di conseguenza l'uso di tali macro.
La mia domanda è: è troppo avere likely
e unlikely
macro su ogni controllo degli errori if
?
Mentre ci siamo, in quali altri luoghi vengono spesso utilizzati?
Nel mio attuale utilizzo è in una libreria che fa un'astrazione dal sottosistema in tempo reale, quindi i programmi diventerebbero portatili tra RTAI, QNX e altri. Detto questo, la maggior parte delle funzioni sono piuttosto piccole e chiamano direttamente una o due altre funzioni. Molte sono persino static inline
funzioni.
Quindi, prima di tutto, non è un'applicazione che potrei profilare. Non ha senso "identificare i colli di bottiglia" poiché è una libreria, non un'applicazione autonoma.
In secondo luogo, è un po 'come "So che è improbabile, potrei anche dirlo al compilatore". Non cerco attivamente di ottimizzare il if
.
likely
ed unlikely
esiste e cosa fanno. Non ho trovato nulla che suggerisca effettivamente quando e dove è meglio usarli.