31.05.2013 Views

Trends - Amiga Magazine Online

Trends - Amiga Magazine Online

Trends - Amiga Magazine Online

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!