Quanto è piccolo l'ingombro di un piccolo compilatore C?

3

Questa settimana potrei ottimizzare usando una libreria C ridotta che ha permesso un drastico restringimento delle dimensioni del codice - da circa 60 K a circa 6 K e quindi potremmo caricare il codice nella memoria on-chip da 8 K di un FPGA (Altera DE2) che suppongo sia SRAM quindi c'è SRAM sia on-chip che off-chip (?)

Il programma era piuttosto piccolo e abbiamo notato che la maggior parte delle dimensioni proveniva dalle librerie e che facevamo sistema incorporato, riduciamo le librerie solo a ciò che è necessario in modo che l'ingombro sia ridotto al minimo.

Mi viene da pensare a qualcosa che ho sentito nei media che era una storia, forse fittizia, che Microsoft doveva consegnare un compilatore C in soli 20 K circa negli anni '70 o nei primi anni '80, quando non c'era molta memoria disponibile per software, è vero? Qual è una dimensione realizzabile del footprint per un piccolo compilatore C?

    
posta Niklas Rosencrantz 11.10.2013 - 06:28
fonte

2 risposte

9

Il compilatore C di Toolworks per CP / M è apparso su un floppy SSSD da 8 "e ha compilato la maggior parte del linguaggio a partire dal 1982. Richiedeva una macchina con 56K di memoria e un'unità floppy. Non ricordo come è necessaria la parte residente di CP / M.

Turbo Pascal 1.0 richiedeva 64K su un computer CP / M e includeva un IDE. Era un compilatore single-pass, scritto in un linguaggio assembly ottimizzato e ha TUTTO nella RAM, rendendolo VINCENTE rapidamente. (Bill Gates, a quanto si dice, non era contento di questo: ha reso Microsoft molto brutta.)

    
risposta data 11.10.2013 - 07:43
fonte
3

Scrivere un piccolo compilatore C è facile, se non ti interessa le prestazioni del codice generato. TinyCC (originariamente di F.Bellard, ora here ) è un compilatore di questo tipo: compila abbastanza rapidamente programmi C (forse con una compilazione da 5 a 10 volte più veloce di GCC ...) ma l'eseguibile prodotto è molto lento (spesso più di 3 volte più lento di quello che gcc -O2 ti dà). E nwcc è di piccole dimensioni, ma probabilmente genera codice lento (a seconda di ciò che gcc -O2 può produrre). Il compilatore tcc (cioè TinyCC) è piuttosto piccolo (poche dozzine di migliaia di righe di codice C) e l'eseguibile (su x86-64) è di circa 190 KByte.

Tuttavia, per i processori attuali, è necessario un ottimizzazione del compilatore per ottenere la maggior parte delle prestazioni dal codice eseguibile compilato. E le buone ottimizzazioni sono difficili da raggiungere e richiedono un gran numero di codice compilatore: sia GCC che Clang / LLVM hanno diverse milioni di righe di codice sorgente (alcuni dei quali sono generati da programmi specifici che producono codice C o C ++). Vedi anche questa risposta a una domanda correlata.

    
risposta data 12.06.2015 - 13:24
fonte

Leggi altre domande sui tag