Sarò quello che va controcorrente qui e dirò, non è mai troppo presto per conoscere le ottimizzazioni, in particolare le ottimizzazioni di assemblaggio e, soprattutto, il debug in assembly. Credo che ne trarrai il massimo beneficio se sei uno studente (perché allora hai molto poco da perdere [vale a dire tempo / denaro saggio]) e tutto da guadagnare.
Se sei nel settore e non hai il compito di armeggiare nel montaggio, allora non farlo. Altrimenti, se sei uno studente o hai tempo in generale, troverei il tempo per imparare a disassemblare i programmi e vedere se riesco a trovare una soluzione migliore rispetto al compilatore. Se non ci riesco, chi se ne frega! Ho appena imparato a scrivere così come il compilatore e questo è un GRANDE vantaggio quando ti trovi di fronte a un bug nel codice di rilascio (senza simboli di debug) e a fissare lo smontaggio perché è l'unica cosa che puoi guardare.
La risposta
Questa è una delle migliori risorse che ho trovato per conoscere le ottimizzazioni.
http://www.agner.org/optimize/
The rant
Se leggi alcuni articoli dei principali sviluppatori (ad esempio, il ragionamento dietro la creazione di EASTL e un'attenta ispezione del codice ti condurrà a commenti come questo perché GCC è terribile nel sottolineare questa dichiarazione if che ti dirà, che cosa la maggior parte di la gente ti dice che il compilatore non è sempre giusto, in particolare nello sviluppo di giochi) e poi metti piede nel settore scoprirai che le ottimizzazioni sono una cosa di tutti i giorni e sapere cosa significa l'output dell'assemblaggio è un grande vantaggio. Inoltre, le persone non sembrano rendersi conto (specialmente su StackOverflow) che i giochi di profilazione sono molto difficili e non sempre precisi.
C'è un avvertimento però. Puoi dedicare del tempo a ottimizzare qualcosa e in seguito renderti conto che è stato tempo perso. Ma cosa hai imparato? Hai imparato a non ripetere lo stesso errore in una circostanza simile.
Ciò che SO sta prendendo ora è secondo me una posizione religiosa verso l'affermazione che non si ottimizza fino a quando non si profila e non ti preoccupare, il compilatore lo sa meglio di te . Ostacola l'apprendimento. Conosco esperti del settore che sono pagati molto bene (e intendo MOLTO buoni soldi) per giocherellare in assemblea per ottimizzare il gioco ed eseguirne il debug perché il compilatore non funziona o semplicemente non può aiutarti, perché, beh, impossibile (arresti anomali relativi alla GPU, arresti anomali in cui è impossibile leggere i dati coinvolti in un debugger ecc. ecc.)!
Che cosa succede se qualcuno che ama farlo, non se ne è ancora reso conto, fa la domanda qui ed è respinto / spento dalle molte risposte che il compilatore conosce meglio di te! e non diventa mai uno di quei programmatori altamente pagati?
Un ultimo pensiero. Se inizi a farlo in anticipo, scoprirai che presto inizierai a scrivere il codice che è nel peggiore dei casi, non ha alcun miglioramento delle prestazioni perché il compilatore lo ha ottimizzato allo stesso modo o nella migliore delle ipotesi, ha alcuni miglioramenti delle prestazioni perché ora il compilatore può ottimizzarlo . In entrambi i casi, è diventata un'abitudine e non sei più lento a scrivere codice in questo modo rispetto a quello che hai fatto prima. Un paio di esempi sono (ce ne sono molti altri):
- Preincrementamento a meno che non si desideri veramente postincremento
- Scrittura di cicli per contenitori utilizzando una variabile di dimensione locale costante anziché chiamare size () sul contenitore all'interno del ciclo.
EDIT: aggiornamento dopo altri 8 anni nel settore. Impara l'assemblaggio. Scopri come funzionano gli ottimizzatori e l'assemblaggio che generano (CompilerExplorer è un ottimo strumento per questo). Ho riscontrato innumerevoli arresti anomali nelle build di test (build ottimizzate per i test interni) in cui non è possibile fare affidamento sul debugger anche con i simboli di debug. Il compilatore ha ottimizzato troppe cose e l'assemblaggio è l'unica fonte di informazioni preziose per trovare il bug dal dump dell'arresto anomalo. Ogni build richiede 30-40 minuti se sei fortunato e primo nella coda di build - quindi non puoi fare affidamento su alcune tecniche tradizionali per isolare il bug. Il multiplayer peggiora le cose. Conoscere l'assemblaggio e come leggere l'assemblaggio ottimizzato ti renderà semplicemente migliore e in definitiva più prezioso per il team.