Ottimizzare C++/Introduzione
Il principale motivo per cui si sceglie si sviluppare del software in C++, invece che in linguaggi di programmazione di livello più alto, è il fatto che questo linguaggio consente di produrre software complesso più efficiente di quello prodotto usando altri linguaggi. Si noti che il linguaggio non garantisce automaticamente di produrre software efficiente, ma lo consente soltanto. Infatti, scrivendo di getto lo stesso programma in C++ e in linguaggi di livello più alto, tipicamente la versione sviluppata in C++ è altrettanto efficiente quanto quella sviluppata negli altri linguaggi.
Tuttavia, un buon programmatore C++, seguendo delle linee-guida apprese da programmatori esperti, o dalla propria esperienza, o da questo libro, è in grado, in primo luogo, di scrivere del software discretamente efficiente fin dalla prima stesura, e poi di ottimizzare il programma risultante, cioè incrementare sensibilmente le prestazioni del programma sostituendo alcuni costrutti con altri equivalenti ma più efficienti. Tale ottimizzazione richiede in primo luogo che il codice sorgente sia stato scritto in modo sufficientemente modulare da isolare le parti più critiche per le prestazioni, e poi di impiegare strumenti, librerie, conoscenze, e tempo, per applicare le modifiche necessarie ad ottimizzare le prestazioni del software prodotto.
Oggigiorno, molte delle sostituzioni che ottimizzano il software sono già effettuate dai compilatori, e quindi non sono più compito del programmatore. Tuttavia, molte altre ottimizzazioni non sono ancora ottenibili dagli attuali compilatori. Questo libro tratta proprio delle tecniche di ottimizzazione che spettano al programmatore, in quanto non sono applicate da tutti gli attuali compilatori.
Questo libro è rivolto ai programmatori che sanno già usare il linguaggio C++, e che lo vogliano impiegare per sviluppare software applicativo o librerie di alta qualità.
Quasi tutte le tecniche di ottimizzazione qui trattate sono indipendenti dalla piattaforma, e pertanto raramente si farà riferimento a particolari sistemi operativi, a particolari architetture di processore, o a particolari compilatori. Tuttavia, si deve tenere presente che alcune delle tecniche proposte risultano non convenienti o persino inapplicabili in alcune combinazioni di sistema operativo/processore/compilatore.