Állandók konvolúciója

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] .  

Folyamatos hajtogatás

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).

Állandó terjedés

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 ;

Lásd még

Jegyzetek

  1. Workshop "Optimizing Compilers" (a GCC példáján). - NGU őket. Lobacsevszkij. - S. 100.
  2. Muchnick, 1997 , p. 362-370.
  3. Sárkánykönyv, 2008 , p. 760.

Irodalom

  • Steven S. Muchnick. Fejlett fordítói tervezés és megvalósítás. — 5. kiadás. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 p. - ISBN 1-55860-320-4 .
  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Fordítók: alapelvek, technikák és eszközök = Compilers : Principles, Techniques, and Tools. — 2. kiadás. - M . : "Williams", 2008. - 1184 p. - 1500 példány.  - ISBN 978-5-8459-1349-4 .

Linkek