Variazioni della dimensione dello sketch

Stasera non avevo molto da fare e mi sono messo a "giocare" col codice per vedere come variava la dimensione dello sketch compilato in base al tipo di comandi e strutture usate.

L'argomento è noto e chi scrive codice da anni sa che i compilatori ottimizzano il codice per la dimensione dell'eseguibile finale oppure per la velocità. Ma anche senza toccare i parametri di ottimizzazione del compilatore, è possibile modificare la dimensione dello sketch semplicemente utilizzando comandi o cicli differenti.

Ad esempio, un delay può essere sostituito da una chiamata ad una funzione che esegue il conteggio del tempo ricorrendo ad un ciclo while salvando così un po' di byte. Oppure è curioso vedere che un ciclo for ed un ciclo do..while consumano la stessa quantità di byte.

Sarebbe carino mettere in quest thread le proprie esperienze personali: avvicinandomi al mondo degli Attiny, sento il problema dell'ottimizzazione del codice molto più di prima. Ma anche chi scrive per i normali Atmega sketch molto grossi il risparmio di qualche decina di byte può diventare fondamentale affinché il proprio programma possa stare tutto nella memoria del microprocessore.

Per cominciare, i commenti non allungano il codice, vero?

Altra cosa, se di una libreria uso solo una o due funzioni, nel codice principale mi tiro dietro tutta la libreria oppure solo la funzione che ho richiamato (e le funzioni ad essa collegate?)?

I commenti non aumentato la dimensione dell'eseguibile perché il compilatore li scarta in fase di compilazione. Abituato agli interpreti, ed essendo la prima volta che usavo il C, sono inoltre rimasto sorpreso nel constatare come i compilatori siano abbastanza intelligenti, nel senso che se tu ad esempio riempi il tuo codice di 10 funzioni ma dal loop() ne chiami solo 1, il compilatore integra solo quella, con grande risparmio. Non so però se ciò viene fatto anche sulle librerie, nel senso che se dai al compilatore la direttiva di integrare una libreria essa venga inserita in toto oppure solo nelle parti che servono, come nell'esempio sopra.