Hoppa trådning
Inom databehandling är hopptrådning en kompilatoroptimering av ett hopp direkt till ett andra hopp . Om det andra villkoret är en delmängd eller invers av det första, kan det elimineras eller träs genom det första hoppet. Detta görs enkelt i ett enda pass genom programmet, efter acykliska kedjade hopp tills kompilatorn kommer till en fast punkt.
Fördelar
Den främsta fördelen med hopptrådning är minskningen av antalet dynamiskt utförda hopp. Detta ger plats för ytterligare optimeringar eftersom det finns en minskning av antalet villkor, vilket kommer att förbättra prestandan. I genomsnitt kan man förvänta sig att 2-3 instruktioner utelämnas som ett resultat av ett framgångsrikt avlägsnande av en runtime -gren .
Exempel
Följande pseudokod visar när ett hopp kan träs.
10. a = SomeNumber(); 20. OM a > 10 GÅ TILL 50 ... 50. OM a > 0 GÅ TILL 100 ...
Hoppet på linje 50 kommer alltid att tas om hoppet på linje 20 tas. Så länge som linje 100 är inom det nåbara området för hoppet (eller hoppets storlek spelar ingen roll), kan hoppet på linje 20 säkert modifieras för att hoppa direkt till linje 100.
Ett annat exempel visar hoppgängning av 2 partiella överlappningsförhållanden:
void baz ( bool x , bool y , bool z ) { if ( x && y ) bar (); if ( y || z ) foo (); }
Ovanstående kan omvandlas till:
void baz ( bool x , bool y , bool z ) { if ( x && y ) { bar (); goto jmp ; } if ( y || z ) { jmp : foo (); } }
Om den första grenen tas är både x
och y
sanna ( logisk konjunktion ), därav utvärdering av uttrycket y || z
behövs inte ( logisk disjunktion ). Därför utförs ett hopp till etikett jmp .
Se även
- Switch (programmering)
- Spaghetti kod
- Optimering av grenförskjutning