miglioramento delle prestazioni quando si utilizza uint_fast8_t?
-
21-09-2019 - |
Domanda
Così, dopo la ricerca di motori molto Ho costruito un quadro 2d per l'iPhone. Come sapete il mondo dell'architettura del motore è vasta così ho cercato di applicare le migliori pratiche per quanto possibile.
ho usato:
uint_fast8_t mId;
Se guardo la definizione di uint_fast8_t trovo:
/* 7.18.1.3 Fastest-width integer types */
...
typedef uint8_t uint_fast8_t;
E Sto usando questi tipi in tutto il mio codice - La mia domanda è: esiste un miglioramento delle prestazioni per l'utilizzo di questi tipi? E che cosa esattamente sta succedendo dietro le quinte? Oltre al fatto evidente che questo è corretto tipo di dati (unsigned 8 bit integer) per i dati, è la pena di avere questa disseminata in tutto il mio codice?
Si tratta di un'ottimizzazione inutile che il compilatore probabilmente prenderà cura di comunque?
Grazie.
Modifica: No risposte / risposte, quindi sto mettendo una taglia su questo
Soluzione
tipi interi "veloci" sono definiti per essere il tipo intero veloce disponibile con almeno la quantità di bit richiesto (in questo caso 8).
Se la piattaforma definisce uint_fast8_t come uint8_t allora non ci sarà assolutamente nessuna differenza in termini di velocità.
Il motivo è che ci possono essere le architetture che sono più lenti quando non si utilizza la lunghezza della parola nativa. Per esempio. Sono riuscito a trovare un riferimento dove per processori Alpha uint_fast_8_t è stato definito come "unsigned int".
Altri suggerimenti
Un uint_fast8_t è il numero intero più veloce garantita almeno 8 bits. A seconda della piattaforma potrebbe essere 8 o 16 o 32 bit di larghezza.
Si mangia curata dal compilatore stesso, effettivamente rendere il vostro programma di eseguire più velocemente
Ecco alcune risorse che ho trovato, si potrebbe già aver visto loro http://embeddedgurus.com/stack-overflow/2008/06/efficient-c-tips-1-choosing-the-correct-integer-size/
http: //www.mail-archive .com / avr-gcc-list @ nongnu.org / msg03149.html
in mingw64 è stato detto in questo modo
/* 7.18.1.3 Fastest minimum-width integer types
* Not actually guaranteed to be fastest for all purposes <---------------------
* Here we use the exact-width types for 8 and 16-bit ints.
*/
typedef signed char int_fast8_t;
typedef unsigned char uint_fast8_t;
typedef short int_fast16_t;
typedef unsigned short uint_fast16_t;
typedef int int_fast32_t;
typedef unsigned int uint_fast32_t;
__MINGW_EXTENSION typedef long long int_fast64_t;
__MINGW_EXTENSION typedef unsigned long long uint_fast64_t;
quindi penso che è ancora consiglia di utilizzare int size nativo ad eccezione di grandi array