Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Equivalenza tra operandi
Forum - C/C++ - Equivalenza tra operandi

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:57
Lunedì, 29/09/2014
Salve, oggi scrivendo un operazione all'interno di una funzione destinata a risiedere su un AVR mi sono posto il problema se l'operatore di prorità sia un peso aggiunto all'esecuzione del calcolo, vi posto subito un esempio
Codice sorgente - presumibilmente C/C++

  1. return x - (y - z);


Codice sorgente - presumibilmente C/C++

  1. return x - y + z;


Il risultato non varia, ma questa piccola modifica che ripercussioni ha a livello di assembly, le parentesi necessitano di cicli in piu oppure la conversione da C ad assembly rende le due operazioni identiche? Dipende dal assembler?

Grazie

PM Quote
Avatar
D@vide (Member)
Expert


Messaggi: 450
Iscritto: 30/06/2010

Segnala al moderatore
Postato alle 19:30
Lunedì, 29/09/2014
Ok immaginiamo un linguaggio a basso livello "fittizio" e poniamo
Codice sorgente - presumibilmente Plain Text

  1. MOV EAX, x
  2. MOV EBX, y
  3. MOV ECX, z



Come puoi vedere sia
Codice sorgente - presumibilmente C/C++

  1. SUB EBX, ECX
  2. SUB EAX, EBX



che
Codice sorgente - presumibilmente C/C++

  1. SUB EAX, EBX
  2. ADD EAX, ECX



sono praticamente equivalenti

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:56
Lunedì, 29/09/2014
Ottimo, grazie mille, assembly non mi è mai piaciuto, è l'argomento che ho piu evitato in assoluto a lezione e non me ne pento in alcun modo XD

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:17
Lunedì, 29/09/2014
Guarda  che puoi misurare i cicli di clock impiegati dalla CPU. Se in futuro dovessi avere ancora di questi dubbi.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 21:50
Lunedì, 29/09/2014
mhh ok devo andare a cercare il registro che conta i cicli allora. Grazie.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:20
Lunedì, 29/09/2014
La risposta breve è che dipende dal compilatore e da quanto intelligenti e aggressive sono le ottimizzazioni.

L'unico modo per poter essere sicuri è di disassemblare l'eseguibile risultante e vedere cosa è venuto fuori.


Il mio blog: https://piero.dev
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:23
Lunedì, 29/09/2014
Beh disassemblare è la cosa migliore, ma non la cosa più veloce per risolvere il tuo problema se è solo questione di ottimizzazione e di tempo impiegato.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:32
Lunedì, 29/09/2014
Testo quotato

e non me ne pento in alcun modo XD



e fai male ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 22:52
Lunedì, 29/09/2014
Testo quotato

Postato originariamente da nessuno:

Testo quotato

e non me ne pento in alcun modo XD



e fai male ...



Ero sicuro che o tu o Piero sareste saltati su con qualcosa di simile XD Le mie basi di Assembly ci sono, diciamo solo che non ci ho dedicato tutto il tempo che ho dedicato ad un C, un C++ o un C#.

Si tratta di ottimizzazione, in questo periodo come detto in diversi post mi sto occupando di scrivere le librerie fondamentali per la gestione degli AVR quindi un ottimizzazione seria fatta a questo punto è d'obbligo, mi sono solo trovato davanti a questo dubbio, dora in poi opterò per il conteggio dei cicli, mi sembra un sistema semplice ed efficace almeno che non mi diciate che il disassembly sia una scelta nettamente superiore.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo