Az állandó hajtás és az állandó terjedés ( konstans promóció, állandó duplikáció , állandó terjedés is ) a modern fordítóprogramokban gyakran használt optimalizálások , amelyek csökkentik a redundáns számításokat azáltal, hogy az állandó kifejezéseket és változókat értékükre cserélik [1] . Gyakran használják a kiterjesztett algoritmus ritka feltételes állandó terjedést is , amely egyszerre hajtja végre az állandó terjesztést és néhány holt kód eltávolítását [2] .
A Constant Folding egy olyan optimalizálás, amely a fordítási időben kiértékeli az állandó kifejezéseket. Először is a numerikus literálokat tartalmazó konstans kifejezések egyszerűsödnek . A soha nem változó változókat vagy állandóként deklarált változókat tartalmazó kifejezések is egyszerűsíthetők . Vegyünk egy példát:
i = 320 * 200 * 32 ;Az állandó hajtogatást támogató fordító nem generál két szorzási utasítást, és nem rögzíti az eredményt. Ehelyett ezt a konstrukciót állandó kifejezésként ismeri fel, és lecseréli a számított értékre (ebben az esetben 2 048 000).
Az állandó terjedés egy olyan optimalizálás , amely lecseréli azt a kifejezést, amely mindig ugyanazt az állandót adja vissza, ha magával az állandóval hajtja végre [3] . Ez lehet egy korábban definiált konstans, vagy konstansokra alkalmazott függvény Tekintsük a következő példát:
int x = 14 ; int y = 7 - x / 2 ; return y * ( 28 / x + 2 );Elosztási xvisszaküldések:
int x = 14 ; int y = 7-14 / 2 ; _ _ return y * ( 28 / 14 + 2 );Továbbá, a folyamatos hajtogatás és szétterítés ya következőket adja vissza (a hozzárendeléseket xés ya későbbiekben valószínűleg eltávolítjuk a holt kód eltávolításának optimalizálásával ):
int x = 14 ; int y = 0 ; return 0 ;