Le macro spesso definite come likely
e unlikely
aiutano il compilatore a sapere se un if
di solito verrà inserito o ignorato. Usandolo si ottengono alcuni (piuttosto minori) miglioramenti delle prestazioni.
Ho iniziato a usarli di recente e non sono sicuro di quanto spesso dovrebbero essere utilizzati tali suggerimenti. Attualmente lo uso con il controllo degli errori if
s, che in genere sono contrassegnati come unlikely
. Ad esempio:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
Sembra ok, ma il controllo degli errori if
s si verifica abbastanza spesso e di conseguenza l'uso delle suddette macro.
La mia domanda è: è troppo per avere likely
e unlikely
macro su ogni controllo degli errori if
?
Mentre ci siamo, quali altri posti sono usati spesso?
Nel mio attuale utilizzo è in una libreria che crea un'astrazione dal sottosistema in tempo reale, quindi i programmi diventerebbero portatili tra RTAI, QNX e altri. Detto questo, la maggior parte delle funzioni è piuttosto piccola e chiama direttamente una o due altre funzioni. Molte sono anche funzioni static inline
.
Quindi, prima di tutto, non è un'applicazione che potrei definire. Non ha senso "identificare i colli di bottiglia" dato che si tratta di una libreria, non di un'applicazione autonoma.
In secondo luogo, è un po 'come "So che è improbabile, potrei anche dirlo al compilatore". Non cerco attivamente di ottimizzare if
.