View Full Version : [C] funzioni - passaggio argomenti o definizione?
Ho una domanda, forse troppo elementare ma sono un autodidatta...
sto scrivendo una funzione c che definisce una funzione matematica complicata, per la definzione mi servono delle variabile tipo int (per indici di sommatoria) e double. Conviene definirle
dentro la funzione c, oppure definirla nel main e poi fare il passaggio di argomento?
Qual è il vantaggio?
Grazie!
wingman87
11-07-2011, 08:50
E' meglio definire le variabili all'interno delle funzioni se possibile, per leggibilità/ordine (sai che le variabili definite nella funzione sono utilizzate solo da essa e quindi non le utilizzerai erroneamente per altri scopi) e consumo di memoria (perché lo spazio per quelle variabili verrà allocato solo quando verrà richiamata la funzione).
Se si tratta di funzioni ricorsive il discorso sulla memoria potrebbe non essere vero.
Ok mi sembra chiaro, chiaro.
Per funzioni ricorsive intendi funzioni che vengono richiamate ricorsivamente, giusto? in quel caso conviene avere una variabile "pronta" per non dichiararla mille volte, giusto?
Ciao :)
wingman87
11-07-2011, 19:43
Solo se hai bisogno di ottimizzazioni spinte, se possibile io preferisco sempre la leggibilità alle performance.
Solo se hai bisogno di ottimizzazioni spinte, se possibile io preferisco sempre la leggibilità alle performance.
Il costo di dichiarare una variabile ad ogni chiamata ricorsiva sta solo in una diversa dimensione del record di attivazione. Allocare N byte o N+10 byte sullo stack ha lo stesso costo.
Se il problema e' proprio nel costo in memoria, allora vale la pensa fare una fuzione esterna che allochi le variabili necessarie e poi le passi alla implementazione ricorsiva vera e propria.
wingman87
11-07-2011, 22:57
Il costo di dichiarare una variabile ad ogni chiamata ricorsiva sta solo in una diversa dimensione del record di attivazione. Allocare N byte o N+10 byte sullo stack ha lo stesso costo.
(N+10)*n° chiamate ricorsive.
Se il problema e' proprio nel costo in memoria, allora vale la pensa fare una fuzione esterna che allochi le variabili necessarie e poi le passi alla implementazione ricorsiva vera e propria.
Anche il passaggio di variabili comporta un costo di memoria. Bisogna sempre valutare sapendo quello che si sta facendo. Se si ha bisogno di aumentare le prestazioni bisogna sapere dove si può tagliare.
In verità io so queste cose ma non mi sono mai trovato a dover fare questo tipo di ottimizzazioni... Tu lavori sui microcontrollori, mi sembra di ricordare, quindi sicuramente ne sai più di me.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.