Elérhetetlen kód

A programozási és fordítóelméletben az elérhetetlen kód a programkód része, amelyet semmilyen körülmények között nem lehet végrehajtani, mert a vezérlőfolyamat gráfban elérhetetlen [1] [2] .

Az elérhetetlen kódot gyakran a holt kód egyik típusaként emlegetik , ezt a terminológiát általában a programok forráskódjának figyelembevételekor használják [3] [4] . A fordítók elméletében azonban ezek a fogalmak semmilyen módon nem kapcsolódnak egymáshoz, a holt kód csak elérhető kód, amely nem befolyásolja a program kimenetét [1] [2] [5] .

A program elérhetetlen kódjának fő hátrányai a következők:

Okok

Az elérhetetlen kód létezését számos tényező okozhatja, például:

Az utolsó öt esetben az elérhetetlen kód örökölt kód, vagyis olyan kód, amely egykor hasznos volt, de már nem használják.

Példák

Tekintsük a következő C példát :

int foo ( int x , int y ) { vissza x + y _ int z = x * y ; /* Elérhetetlen kód */ }

A művelet int z = x*yelérhetetlen kód, mert az eljárás előtte lép ki (az eljárás visszatérése utáni műveletek nem biztos, hogy elérhetetlen kódok, például ha a visszatérés utáni címkére egy goto utasítás hivatkozik ).

Elemzés

Az elérhetetlen kód megkeresése a forráskódban statikus kódelemzéssel végezhető el [3] [4] . Egy optimalizáló fordítóprogramban az elérhetetlen kód eltávolításának optimalizálása képes észlelni és eltávolítani az elérhetetlen kódot , amely megtalálja az elérhetetlen csomópontokat a vezérlőfolyamat gráfban (CFG) és eltávolítja azokat [6] . Egy CFG gráf elérhetetlen csomópontokra történő egyszerű elemzését a fordító gyakran külön funkcióként, ún. szemétgyűjtő , amelyet közvetlenül a vezérlési folyamatgráfot megváltoztató transzformációk után hívunk meg [7] .

A kód elérhetetlenné válhat az közbenső reprezentáción végrehajtott egyéb fordítói átalakítások, például az általános részkifejezés-eltávolítási optimalizálás eredményeként .

A gyakorlatban a végrehajtott elemzés összetettsége jelentősen befolyásolja az észlelt elérhetetlen kód mennyiségét. Például folyamatos hajtogatást és egyszerű vezérlési folyamatelemzést követően azt tapasztalhatja, hogy a következő példában szereplő utasításban lévő kód ifnem érhető el:

int foo ( üres ) { int n = 2 + 1 ; ha ( n > 4 ) { printf ( "%d" , n ); /* Elérhetetlen kód */ } }

A következő példában szereplő elérhetetlen kód azonosításához azonban egy sokkal kifinomultabb elemzési algoritmust kell alkalmazni:

int foo ( üres ) { dupla x = sqrt ( 2 ); ha ( x > 4 ) { printf ( "%lf" , x ); /* Elérhetetlen kód */ } }

Az egyik praktikus megoldás, ha először egy egyszerű elérhetetlen kódelemzést végzünk, majd a profilkészítővel kezeljük a bonyolultabb eseteket. A profilkészítő nem tudja bizonyítani, hogy egy kódrészlet elérhetetlen, de jó heurisztika lehet a gyanús csomópontok megtalálásához, amelyek valószínűleg elérhetetlenek. Miután megtalálta ezeket a potenciálisan elérhetetlen csomópontokat, néhány hatékony elérhetetlen kódelemző algoritmus alkalmazható.

Lásd még

Jegyzetek

  1. 1 2 Fordítóprogram tervezése – 544. o.
  2. 1 2 Debray, SK, Evans, W., Muth, R., és De Sutter , B. 2000. Fordító technikák kódtömörítéshez Archiválva : 2003. május 22. a Wayback Machine -nél . ACM Trans. program. Lang. Syst. 22, 2 (2000. március), 378-415. ( összefoglaló )
  3. 12 Holt kód észlelése és eltávolítása . Aivosto. Letöltve: 2012. július 12. Az eredetiből archiválva : 2012. augusztus 5..
  4. 1 2 Összehasonlít néhány ingyenes alternatívát a DCD-vel (Dead Code Detector) (lefelé irányuló kapcsolat) . java.net Letöltve: 2012. július 12. Az eredetiből archiválva : 2012. szeptember 23.. 
  5. Fordítók - alapelvek, technológiák, eszközök - S. 669 ( elérhetetlen kód ), 713 ( holt kód ).
  6. Fordítóprogram tervezése – S. 550.
  7. A. Yu. Drozdov, A. M. Sztyepanenkov. Felügyelt optimalizálási csomagok. In Information Technology and Computing Systems , 2004, 3. sz. ( szöveg archiválva )

Irodalom

  • Cooper és Torczon. Fordítóprogram tervezése. - Morgan Kaufmann, 2011. - P. 544-550, 593. - ISBN 978-0-12-088478-0 .
  • 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 .
  • Muchnick, Steven S. Advanced Compiler Design and Implementation . - Morgan Kaufmann Publishers , 1997. - S.  580-582 . - ISBN 1-55860-320-4 .