Tiny C Compiler: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 30:
TCC ha tempi di compilazione molto rapidi, tuttavia questo comporta un compromesso con l'efficienza del codice generato da esso. Il compilatore esegue un numero limitato di ottimizzazioni, come [[constant folding]] per tutte le operazioni, ottimizzazione di moltiplicazioni e divisioni tramite [[shift aritmetico]] quando possibile, ottimizzazione degli operatori di confronto tramite l'uso di una specifica cache, e una semplice [[register allocation]] che consente di risparmiare cicli di save/load all'interno di una singola istruzione ad alto livello.
 
In generale TCC punta maggiormente sullaa compattezza e velocità piuttosto che sullall'ottimizzazione, generando il codice in un unico passaggio e senza eseguire molte delle ottimizzazioni praticate comunemente dai principali compilatori ottimizzanti. In particolare, TCC compila ogni istruzione individualmente, riportando i valori dei registri sullo stack al termine di ognuna e richiedendo una nuova lettura degli stessi se l'istruzione successiva li riutilizza. TCC inoltre non usa tutti i registri disponibili, ad esempio nell'architettura x86 non impiega mai i registri ebx, esi e edi, perché devono essere preservati dalle chiamate di funzione.<ref>Glöckner, Daniel. [http://lists.gnu.org/archive/html/tinycc-devel/2006-09/msg00028.html Re: Tinycc-devel (no subject)], September 8, 2006.</ref>
 
In un [[benchmark (informatica)|benchmark]] effettuato usando una versione modificata di TCC, capace di compilare GCC, l'esecuzione di cc1 (il compilatore C di GCC) su sé stesso, usando un livello di ottimizzazione -O1 o equivalente, ha richiesto 518 secondi quando compilato con GCC 3.4.2, 558 secondi con GCC 2.95.3, 545 con il compilatore C Microsoft e 1145 con TCC.<ref name="grischka"/>