Ottimizzare C++/Ottimizzazione del codice C++/Supporto run-time: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiungo: en:Optimizing C++/Code optimization/Run-time support |
Riportate modifiche da en.wikibooks |
||
Riga 2:
Le routine del supporto run-time del linguaggio C++ hanno ovviamente un costo significativo, in quanto altrimenti tali funzionalità sarebbero state espanse ''inline''.
=== L'operatore <code>typeid</code> ===
Line 14 ⟶ 15:
'''Invece dell'operatore <code>dynamic_cast</code>, usa l'operatore <code>typeid</code>, o, ancora meglio, una funzione <code>virtual</code>.'''
Tale operatore può richiedere un tempo notevolmente superiore a quello richiesto da una semplice chiamata a funzione, e maggiore
=== La specifica di eccezioni vuota ===
Line 26 ⟶ 27:
'''Sposta prima dei colli di bottiglia le istruzioni <code>try</code>, e dopo i colli di bottiglia le corrispondenti istruzioni <code>catch</code>.'''
In altre parole, estrai dai colli di bottiglia i blocchi <code>try/catch</code>.
L’esecuzione di un blocco <code>try/catch</code> talvolta ha costo zero, ma altre volte comporta un rallentamento. Evita di eseguire tale blocco all’interno dei colli di bottiglia.▼
▲
=== Operazioni a virgola mobile ===▼
▲=== Operazioni a virgola mobile o intere ===
'''Se il processore target non contiene un'unità a virgola mobile, sostituisci funzioni, costanti e variabili a virgola mobile con le corrispondenti funzioni, costanti e variabili intere; mentre se contiene un'unità a virgola mobile a precisione solamente singola, sostituisci funzioni, costanti e variabili di tipo <code>double</code> con le corrispondenti di tipo <code>float</code>.'''▼
▲'''Se il processore target non contiene un'unità a virgola mobile, sostituisci le funzioni, costanti e variabili a virgola mobile con le corrispondenti funzioni, costanti e variabili intere; mentre se contiene un'unità a virgola mobile a precisione solamente singola, sostituisci funzioni, costanti e variabili di tipo <code>double</code> con le corrispondenti di tipo <code>float</code>.'''
Gli odierni processori per sistemi desktop e server contengono hardware dedicato all'aritmetica a virgola mobile, sia a precisione singola che doppia, per cui tali operazioni, eccettuate somme e sottrazioni, che sono un po' più lente, sono pressoché altrettanto veloci quanto quelle su numeri interi.▼
▲Gli odierni processori per sistemi desktop e server contengono hardware dedicato all'aritmetica a virgola mobile, sia a precisione singola che doppia, per cui tali operazioni
Alcuni processori dedicati per sistemi embedded, invece, non contengono hardware dedicato all'aritmetica a virgola mobile, o contengono hardware in grado di gestire solo la precisione singola.
Pertanto, in tali sistemi, le operazioni non disponibili in hardware vengono solamente emulate con lentissime funzioni di libreria. In tal caso, risulta molto più veloce utilizzare l'aritmetica intera, oppure, se disponibile in hardware, l'aritmetica a precisione singola.
Per gestire numeri decimali usando l'aritmetica
===
'''Usa funzioni ottimizzate per convertire numeri in stringa.'''
Le funzioni standard di conversione da numero intero a stringa e da numero a virgola mobile a stringa sono poco efficienti.
Per svolgere velocemente tali operazioni, usa funzioni ottimizzate non-standard, eventualmente scritte da te.
=== Uso delle funzioni di <code>cstdio</code> ===
'''Per eseguire operazioni di input/output, invece di usare gli stream del C++, usa le vecchie funzioni del C, dichiarate nel file di intestazione <code>cstdio</code>.'''
Le primitive di I/O del C++ sono state progettate principalmente per effettuare il controllo statico dei tipi (o ''type safety'') e per consentire la personalizzazione per le proprie classi invece che per le prestazioni, e molte loro implementazioni risultano essere piuttosto inefficienti.
In particolare, le funzioni di I/O del linguaggio C <code>fread</code> e <code>fwrite</code> sono più efficienti delle funzioni membro della classe <code>fstream</code> <code>read</code> e <code>write</code>.
[[Categoria:Ottimizzare C++|Supporto run-time]]
|