Go Down

Topic: struct (Read 374 times) previous topic - next topic

miky_police

Salve ragazzi, è da un po che non scrivo, ma da qualche giorno sto rivedendo di sanapianta il codice di un progetto.
Volendo impostare la manipolazione dei dati con le struct volevo chiedervi se, a parte la comodità di utilizzare i dati strutturati, vi sia una differenza a livello prestazionale.
Grazie anticipatamente.
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

Standardoil

#1
May 10, 2019, 11:25 am Last Edit: May 10, 2019, 11:26 am by Standardoil
No
Forse

Ovvero:

No tutt'altro, siccome passi per un elemento in più, la struttura appunto, questo complica l'accesso ai dati

Forse, dato che un compilatore ottimizzante dovrebbe approfittare della maggiore regolarità dei dati, o almeno non peggiorare la situazione

Sì, nel senso che una forma dati strutturata fa "naturalmente" pensare in maniera più strutturata
E questo riduce la complessità di scrittura del codice, lo rende più corto, più lineare, più rapido da scrivere, e spesso anche più efficiente
Però se ti fermi solo al primo passo, non serve. È solo complicazione...
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

miky_police

Più o meno la spiegazione del perché l'AI non sarà mai una mente umana... :D
Proprio perché non ha il dono del "perché", saranno e rimarranno macchine mangiaByte per quanto potranno somigliare a noi!
Grazie Standardoil e condivido quello che hai listato. Sei stato molto chiaro nel spiegare, in due righe, che struct semplifica e giustifica i nostri ragionamenti a discapito delle risorse.
Per altri punti di vista attendo!
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

SukkoPera

#3
May 10, 2019, 11:52 am Last Edit: May 10, 2019, 12:04 pm by SukkoPera
È impossibile dare una risposta generica, dipende da cosa ci vuoi fare. Però ti rigiro la domanda: cosa ci guadagni a non usarle?

Tieni conto che usare (bene) le struct è un passo verso la programmazione a oggetti, che oggi è il paradigma che va per la maggiore, e che sicuramente porta grandi benefici in termini di leggibilità, mantenibilità e riciclo del codice. Questi sono gli aspetti che bisognerebbe prediligere nella programmazione, invece di ricercare l'ottimizzazione esasperata a tutti i costi. Eventuali problemi di performance si affrontano in un secondo tempo tramite profiling del codice e ottimizzazioni mirate.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

maubarzi

Diciamo che le pessimizzazioni sull'uso delle risorse derivanti dalle struct sono la pagliuzza rispetto alle travi derivanti da logiche sbarellate di più alto livello che si vedono in giro ;)

Secondo me, anche senza aggiungerci cose tipiche della programmazione ad oggetti, ma semplicemente usandole come strumento per raggruppare e ordinare la struttura dati, può dare vantaggi notevoli riguardo alla manutenibilità.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

SukkoPera

#5
May 10, 2019, 12:27 pm Last Edit: May 10, 2019, 12:29 pm by SukkoPera
raggruppare e ordinare la struttura dati
Questa è esattamente la ragione prima che ha portato allo sviluppo della programmazione a oggetti ;).

Il passo successivo è metterci dentro anche le funzioni che manipolano i dati.

Tutto il resto degli aspetti tipici della OOP nasce da queste premesse.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

miky_police

#SukkoPera io personalmente, al momento, utilizzo struct perché avendo 3 "oggetti" per i quali devo dichiarare una serie di variabili comuni tra loro per funzione (ad esempio consensi, flag, millis, dato elaborato nel loop, dato trasmesso via wireless a termine del loop, ecc) diventa molto più leggibile e facile da listare il codice senza dover ricordare quale strambo nome gli abbia assegnato a quella variabile. Basta oggetto.variabile = xxx (più leggibile di così)
Per questo, UPpo la mia domanda iniziale. In termini prestazionali cambia poco/niente al micro, o ci sono addirittura dei decrementi prestazionali degni di nota per un semplice 328?
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

maubarzi

Si, però non necessariamente il codice di manipolazione deve essere inglobato nella struttura dati.
Poi con i vari paradigmi di programmazione risolvi gli stessi problemi in modo differente, quello che accomuna, in genere, è la necessità di dare una struttura, ai dati, facilmente gestibile, non tanto all'interno del codice ma proprio nella programmazione, per non rischiare di perdersi pezzi per strada quando i dati sono troppo sparpagliati.
Strucando strucando il concetto fino a porlo in termini pure troppo elementare e semplificativo.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

miky_police

#8
May 10, 2019, 12:42 pm Last Edit: May 10, 2019, 12:45 pm by miky_police
Il passo successivo è metterci dentro anche le funzioni che manipolano i dati.
Proprio stamattina leggevo il post di standardoil delle funzioni all'interno delle struct. non pensavo fosse possibile... questo spalanca le porte ad altri orizzonti per me! Approfondirò!

EDIT: maubarzi il problema è che, ad esempio, ad esempio mentre stai elaborando il dato di un oggetto devi interdire dei consensi o flag di altri oggetti in alcune condizioni piuttosto che in altre. Quindi strutturando i dati è molto più difficile confondersi.
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

maubarzi

Si, è quello che dico io, aiuta a tenere sotto controllo le cose.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

SukkoPera

Ma perché dovrebbero esserci decrementi prestazionali? Cosa ti fa pensare ciò?

Anzi, aumenti anche lo località dei dati e quindi la CPU sfrutta meglio la cache!

(Dubito che il 328 abbia memoria cache, ma rende l'idea.)
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Maurotec

Quote
Tieni conto che usare (bene) le struct è un passo verso la programmazione a oggetti, che oggi è il paradigma che va per la maggiore, e che sicuramente porta grandi benefici in termini di leggibilità, mantenibilità e riciclo del codice. Questi sono gli aspetti che bisognerebbe prediligere nella programmazione, invece di ricercare l'ottimizzazione esasperata a tutti i costi. Eventuali problemi di performance si affrontano in un secondo tempo tramite profiling del codice e ottimizzazioni mirate.
Quando dice (bene) intende anche di evitare di passare come argomenti oggetti pesanti a delle funzioni, meglio avere una o più istanza di struct globali, questo per lo stile arduino.

E non vedo perché dovrebbero peggiorare le prestazioni.  

SukkoPera

Non solo quello, anche perché non c'è niente di male se le passi by reference.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

miky_police

#13
May 10, 2019, 01:18 pm Last Edit: May 10, 2019, 01:20 pm by miky_police
Quando dice (bene) intende anche di evitare di passare come argomenti oggetti pesanti a delle funzioni, meglio avere una o più istanza di struct globali, questo per lo stile arduino.

E non vedo perché dovrebbero peggiorare le prestazioni. 
questo è in contrasto con questo
No tutt'altro, siccome passi per un elemento in più, la struttura appunto, questo complica l'accesso ai dati.
EDIT: Ecco perché mi piace il confronto...
Il vero stupido è colui che fa e rifa la stessa cosa aspettandosi risultati diversi. A.E.

Standardoil

Il fatto di mettere un oggetto in più,la struttura, con un operatore in più,  il punto, complica certamente il programma
Poi compilatori 'furbi' sanno approfittarne, ma un compilatore 'generico' forse no
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Go Up