PDA

View Full Version : Obbiettivo risparmio risorse in C


NeoNum6
14-01-2006, 14:04
secondo voi in una logica di rispiarmio delle risorse di sistema è una buona tecnica di programmazione utilizzare che magari variabili sono state utilizzate in un'altra parte di codice(naturalmente facendo in modo che questo non influisca la corretta riuscita del programma)

fek
14-01-2006, 14:23
secondo voi in una logica di rispiarmio delle risorse di sistema è una buona tecnica di programmazione utilizzare che magari variabili sono state utilizzate in un'altra parte di codice(naturalmente facendo in modo che questo non influisca la corretta riuscita del programma)

No.

NeoNum6
14-01-2006, 14:55
e perchè no??

fek
14-01-2006, 14:58
e perchè no??

Perche' no :p

A parte gli scherzi, perche' la risorsa piu' limitata e che va ottimizzata quando si programma e' il cervello del programmatore. E riutilizzare variabili globali e' sicuramente il modo peggiore di aiutarlo. Quindi no, non e' una buona pratica di programmazione.

Il tuo obiettivo deve essere sempre e solo la correttezza di cio' che scrivi e la sua leggibilita'. Quando hai raggiunto questi due obiettivi, quando hai dei requisiti chiari riguardo all'uso delle risorse a tua disposizione, allora puoi passare all'ottimizzazione. Ma non prima.

NeoNum6
14-01-2006, 16:45
...bhè si hai sicuramente ragione...ma un programmatore esperto come si comporta??

rdefalco
15-01-2006, 19:27
Se dopo aver riutilizzato le variabili sposti alcuni frammenti di codice (magari per anticipare la chiusura di alcune risorse) potresti mandare in overlap i due utilizzi e non capiresti più perché il programma prima andava, dopo no.

17Qwerty71
15-01-2006, 20:27
...bhè si hai sicuramente ragione...ma un programmatore esperto come si comporta??
Un programmatore è esperto quando scrive codice chiaro e autoesplicativo :)

tglman
15-01-2006, 21:53
be io direi che variabili del tipo i,k si possono riutilizzare, con molta attenzione....

mai capitato:

for(i=0;i<n;i++)
{
for(i=0;i<n;i++);
}


e poi non ha funzionato più niente.....

comunque personalmente prima creo 300 variabili all'inizio e cerco di scrivere codice comprensibile, poi salvo e metto da parte per rileggere in futuro, poi passo al massacro, cioe i 3000 puntatori diventano un'unico void *, i 300 indici diventano tutti i, e alla fine non si capisce più niente....
però dorebbe esere più veloce

ciao !

17Qwerty71
15-01-2006, 22:04
be io direi che variabili del tipo i,k si possono riutilizzare, con molta attenzione....

mai capitato:

for(i=0;i<n;i++)
{
for(i=0;i<n;i++);
}


e poi non ha funzionato più niente.....

comunque personalmente prima creo 300 variabili all'inizio e cerco di scrivere codice comprensibile, poi salvo e metto da parte per rileggere in futuro, poi passo al massacro, cioe i 3000 puntatori diventano un'unico void *, i 300 indici diventano tutti i, e alla fine non si capisce più niente....
però dorebbe esere più veloce

ciao !

Ma perchè invece di utilizzare variabili come i, j, h, è, z... e chi più ne ha più ne metta non utilizzare identificativi come ContUp (possibile nome di un contatore), oppure PosCharStr (Contatore per la posizione all'interno di un'array di caratteri) ?
Poi nel caso di una variabile che serve da contatore è un po' diversa la cosa, se sai già (e sei sicuro) che nei due casi in cui le utilizzi, seppur per cicli diversi, non avviene nessun tipo di conflitto puoi farlo senza danneggiare la leggibilità del codice. :)

fek
15-01-2006, 22:08
comunque personalmente prima creo 300 variabili all'inizio e cerco di scrivere codice comprensibile, poi salvo e metto da parte per rileggere in futuro, poi passo al massacro, cioe i 3000 puntatori diventano un'unico void *, i 300 indici diventano tutti i, e alla fine non si capisce più niente....
però dorebbe esere più veloce

ciao !

Dovrebbe e nella maggior parte dei casi non lo e' :)
Pero' hai perso in leggibilita'.

Condividere variabili temporanee e' perfettamente inutile in termini di prestazioni perche' e' un lavoro che il compilatore gia' fa e lo fa meglio di quanto lo possa fare il programmatore (si chiama register allocation).

Le regole per usare le variabile dovrebbero essere:

- Dichiarare la variabile solo quando e' usata (non all'inizio della funzione) e inizializzarla.

- Dare uno e un solo scopo ad ogni variabile (non riutilizzarle).

- Minimizzare la vita di una variabile, ovvero il numero di linee di codice in cui la variabile e' usata

71104
16-01-2006, 11:57
aggiungo piuttosto che un risparmio intelligente che un programmatore potrebbe (e dovrebbe sempre) fare è quello di deallocare risorse allocate dinamicamente il prima possibile (analogamente a come si dovrebbe fare per le variabili insomma :)). altra cosa importante è evitare i leak, non solo nell'heap (malloc/realloc/free) ma anche qualsiasi altro tipo di leak di risorse, ad esempio handles di Windows, file descriptors di Linux, oggetti, risorse allocate tramite funzioni intermedie fornite da librerie statiche o dinamiche, eccetera.

71104
16-01-2006, 11:58
oppure alternativa sarebbe quella di usare un garbage collector, ma purtroppo non sempre se ne ha la possibilità.