Ich bin mir nicht sicher, ob ein Compiler 8bit arithmetische Operationen für uint8_t erzeugen wird, wenn es funktioniert (ziemlich unwahrscheinlich, weil es unwahrscheinlich ist, dass es schneller ist).
@harold erwähnt, was ich vorher gesagt habe, ist nicht so morden jetzt ... Partielle Register Update-Problem ist jetzt nicht mehr so ernst für 8bit-Operationen. So sind die meisten 8bit Operationen nicht schneller. Während 8bit Division ein wenig schneller ist und ich versuche herauszufinden, warum MS Compiler es nicht verwenden wird. (Nicht so sicher: Da das teilweise aktualisierende Problem nur größtenteils reduziert, nicht vollständig entfernt und sogar von AMD beibehalten wird, ist dieser eine Zyklusvorteil der 8bit-Teilung einfach nicht wert, missbraucht zu werden).
Original: Auf morden x86-Prozessoren, das Gesicht 8bit Operationen ein Problem namens partial register update
, dass Sie nur einen Teil des gesamten Registers ändern, die in false dependency
Ergebnisse, die ernsthaft Auswirkungen auf die Leistung.
Und FYI, auf der Sprachebene gibt es keine Arithmetik für ganzzahlige Typen kleiner als int in C++. Es gibt die usual arithmetic promotion
, um den Typ zu heben.
Optimierungen sind im Allgemeinen plattformspezifisch. In den meisten Plattformen ist die CPU-Architektur größer als 8 Bit. Es verwendet physikalisch Werte größer als 'uint8'. Das liegt weit außerhalb des C++ - Standards. –
Ich vermute, das ist die CPU, die auf 32/64Bits arbeitet, die es ändert, nicht C++. d. h. der Compiler kann nichts anderes tun, als wenn er auf Ihre Plattform abzielt. – fwgx
@ FrançoisAndrieux Das ist richtig, aber ich frage mich, warum C++ keinen direkten Weg zum Addieren, Subtrahieren, Multiplizieren oder Teilen von Uint8 gemacht hat. –