Performance-Vorteil bei der Verwendung von uint_fast8_t?
-
21-09-2019 - |
Frage
So, nachdem Motoren viel forschen Ich habe für das iPhone einen 2d Rahmen baut. Wie Sie die Welt der Motorarchitektur wissen ist groß, damit ich am besten Praktiken so weit wie möglich anzuwenden versucht haben.
Ich habe mit:
uint_fast8_t mId;
Wenn ich die Definition von uint_fast8_t nachschlagen finde ich:
/* 7.18.1.3 Fastest-width integer types */
...
typedef uint8_t uint_fast8_t;
Und ich habe diese Art in meinem Code - Meine Frage ist, gibt es einen Leistungsvorteil dieser Art zu verwenden? Und was genau hinter den Kulissen? Neben der offensichtlichen Tatsache, dass diese richtigen Datentyp (unsigned 8-Bit-Integer) für die Daten vorhanden sind, lohnt es sich, diese in meinem Code gespickt zu haben?
Ist dies eine unnötige Optimierung, dass der Compiler wahrscheinlich kümmern sowieso nehmen würde?
Danke.
Edit: Keine Antworten / Antworten, also bin ich ein Kopfgeld auf diese setzen
Lösung
die "schnelle" Integer-Typen definiert sind, die schnellste Integer-Typ verfügbar mit mindestens die Menge an Bits, die erforderlich sein (in diesem Fall 8).
Wenn Ihre Plattform definiert uint_fast8_t als uint8_t dann wird es absolut kein Unterschied in der Geschwindigkeit.
Der Grund dafür ist, dass es Architekturen sein, die langsamer sind, wenn sie nicht ihre Mutterwortlänge verwendet wird. Z.B. Ich konnte eine Referenz finden, wo für Alpha-Prozessoren uint_fast_8_t definiert wurde „unsigned int“ zu sein.
Andere Tipps
Ein uint_fast8_t ist die schnellste ganze Zahl garantiert mit mindestens 8 Bits. Abhängig von Ihrer Plattform könnte es sein, 8 oder 16 oder 32 Bit breit.
Es ist nicht betreut vom Compiler selbst, ist es in der Tat macht Ihr Programm schneller ausgeführt
Hier sind einige Ressourcen, die ich gefunden, könnte man sich schon gesehen hat http://embeddedgurus.com/stack-overflow/2008/06/efficient-c-tips-1-choosing-the-correct-integer-size/
http: //www.mail-archive .com / avr-gcc-Liste @ nongnu.org / msg03149.html
in mingw64 es so gesagt wurde,
/* 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;
so denke ich, es ist immer noch außer für große Arrays zu verwenden nativen int size empfohlen