Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Esperienze di programmazione in<br />
C: la lunghezza degli eseguibili<br />
Romano Tenca<br />
IJna delle cose che iiii lia seinpre sorpreso su <strong>Amiga</strong> è la<br />
lunghezza eccessiva e spesso ingiustificata dei file<br />
eseguil-Ai. Accade molte volte di trovare, sia fra i prograiiliili<br />
coiiimerciali clie fra quelli di l'D, delle utility molto<br />
interessanti, che svolgono però attività limitate. la cui<br />
lunghezza è tale da renderne difficile. o quantoiiieno<br />
scomodo l'uso, specie a chi, coiiie ine e tanti altri, lisa un<br />
sisteiiia senza hard disk e con clue floppy.<br />
Da 6516 a 356 byte in pochi minuti<br />
Quando ho acquistato <strong>Amiga</strong> e sentivo parlare di floppy da<br />
880K e 512K di RAM, provenendo da uno Specti-uiu 48K. iiii<br />
sembravano cifre esorbitanti, dopo un po' iili sono accorto<br />
che lo spazio non basta iiiai e che anche i prograiiiiiii più<br />
semplici per Aiiiiga occupano spesso decine e decine di<br />
Kilobyte, su disco e in nieinoria. Uno dei metodi piìi diff~~si<br />
per venire incontro a questo tipo di problenia, per i dischi<br />
almeno. è l'uso dei cruncher. tipo PowerPacker o<br />
TurboIinploder, e di fatto, se esaininaste i miei dischi. vi<br />
trovereste solo o quasi prograiiimi "crunchati": iiia tale<br />
soluzione interviene a cose fatte e rappresenta una scelta<br />
clie può dare origine a problerni di c~mpatibilità, oltre a<br />
ii~ipedire l'liso di tali file come programmi residenti.<br />
La lungliezza dei file eseguil>ili dipende da tanti fattori e in<br />
priiilo luogo dalla coiuplessità dell'ambiente Aiiiiga, che<br />
ricliiede spesso numerose cliiaiiiate al sistema per eseguire<br />
operazioni che, in un aiiibiente iiionotasking, si potrebbero<br />
realizzare con un numero decisaniente ridotto cli istruzioni.<br />
Dipende anche dall'assenza di routine di sistema di alto<br />
livello (come quelle fornite fino ad ora dalla libreria I-'ublic<br />
Domain ARP), clie soltanto la versione 2.0 del sisten~a<br />
operativo offrirà di serie.<br />
Da questo punto di vista c'è poco da fai-e, anzi nulla, a ~iieno<br />
clie non si scelga di non rispettare le specifiche del sistema,<br />
andando alla ricerca di metodi poco ortodossi per svolgere<br />
le operazioni preventivate. &la è poco consigliabile: è<br />
seiiipre meglio accollarsi I'overhead introdotto dal rispetto<br />
delle regole, che trovarsi a dover rifare tutto non appena<br />
muti, anche solo parzialmente, il sistema operativo.<br />
versione (o anche solo una nuova configurazione<br />
harda-ai-e) del sistema. oppure a dover far fronte<br />
contemporaneamente alle diverse possibilità, prevedendo<br />
codice diverso per ogniina di esse: a questo modo però i<br />
byte risparnliati da una pai-te si devono sprecare dall'altra,<br />
vanificando il tutto.<br />
Non è dunque a questo livello che si può risparmiare<br />
memoria e spazio su disco, né questo sarà l'obiettivo del<br />
presente articolo. 11 caiiipo che intende coprire è ruolto<br />
illeno complicato e piu a portata cli illano, e riguarda<br />
esplicitaniente la compilazione in C.<br />
Preiiiettiamo subito che il coiiipilatoi-e cui faremo specifico<br />
riferimento sarà il Lattice C v. 5.04, riia molte delle cose<br />
dette, potrebbero valere, una volta adattate, anclie per altri<br />
corripilatori.<br />
Inoltre, il discorso, pur riguardando tutti i progi-aiiiiili scritti<br />
in C, vale in inaniera particolare per i programmi di utilità<br />
che necessitano di risorse liriiitate e per i quali non è<br />
necessario niantenere un altissimo grado di portabilità<br />
verso altri sistemi.<br />
Il concetto di fondo 2 il seguente: spesso i program~iii sono<br />
lunghi perché i progranimatori vi incliidono, alle volte<br />
inconsapevolii~ente, niontagne di funzioni superflue, che<br />
potrebbero benissiliio essere escluse senza alcuna<br />
liinitazione particolare sotto il profilo delle prestazioni e del<br />
fiinzionaniento.<br />
Le funzioni cui mi riferisco non sono quelle scritte<br />
dall'autore del prograiiiiiia, riia quelle incluse<br />
nell'esegiiibile dal compilatore e dal linker per creare un<br />
ainbicnte di lavoro C standard, garantire la piena portabilità<br />
verso altri sistemi, tnettere a disposizione del<br />
progi-amriiatore dei servizi utili in inolte situazioni, iila non<br />
in tutte. Mi serubra importante i-iiiscire a conoscere bene<br />
I'aml~iente di lavoro e tutti i servizi forniti dal compilatore.<br />
per potersi avvantaggiare solo di quelli necessari ed<br />
eliminare tutti gli altri.<br />
Quindi, sebbene esistano delle scorciatoie che consentano, Per seguire in maniera concreta il discorso usereino un<br />
alle volte, di abbreviare il codice prodotto, infrangendo le programma eseiiipio, su cui andreino ad operare delle<br />
regole del sistema. queste risultano alla fine poco sicure e riduzioni progressive, eliminando il superfluo e cercando di<br />
obbligano a riscrivere i programnli quando esce una nuova arrivare fino al iiliniino consentito.