Warum ist es so, dass wir für eine numerische Eingabe lieber einen int als einen kurzen bevorzugen, auch wenn die Eingabe aus sehr wenigen ganzen Zahlen besteht.
Die Größe von short ist 2 Bytes auf meinem x86 und 4 Bytes für int, sollte es nicht besser und schneller sein als ein int zuzuweisen?
Oder irre ich mich damit, dass Short nicht benutzt wird?
CPUs sind normalerweise am schnellsten, wenn sie mit ihrer "nativen" Integer-Größe arbeiten. Auch wenn ein short
kleiner als ein int
ist, liegt int
wahrscheinlich näher an der nativen Größe eines Registers in Ihrer CPU und ist daher wahrscheinlich der effizienteste der beiden.
In einer typischen 32-Bit-CPU-Architektur erfordert das Laden eines 32-Bit-Wertes einen Buszyklus, um alle Bits zu laden. Das Laden eines 16-Bit-Wertes erfordert einen Buszyklus zum Laden der Bits, plus wirft die Hälfte davon weg (dieser Vorgang kann immer noch innerhalb eines Buszyklus stattfinden).
Eine 16-Bit-Kurzform ist sinnvoll, wenn Sie so viele im Speicher behalten (z. B. in einem großen Array), dass die 50% ige Reduzierung der Größe zu einer merklichen Speicherreduktion führt Overhead. Sie sind nicht schneller als 32-Bit-Ganzzahlen auf modernen Prozessoren, wie Greg richtig bemerkte.
In eingebetteten Systemen werden die Datentypen short
und unsigned short
für den Zugriff auf Elemente verwendet, die weniger Bits als die native Ganzzahl erfordern.
Wenn mein USB-Controller beispielsweise über 16-Bit-Register verfügt und mein Prozessor über eine native 32-Bit-Ganzzahl verfügt, würde ich mit unsigned short
auf die Register zugreifen (vorausgesetzt, der unsigned short
-Datentyp ist 16-Bit).
Die meisten Ratschläge erfahrener Benutzer (siehe news: comp.lang.c ++. Moderated) verwenden die native Integer-Größe, es sei denn, ein kleinerer Datentyp muss verwendet werden. Das Problem bei der Verwendung von short
zum Speichern von Speicher besteht darin, dass die Werte die Grenzen von short
überschreiten können. Dies kann auch ein Leistungseinbruch bei einigen 32-Bit-Prozessoren sein, da sie 32 Bits nahe der 16-Bit-Variablen holen und die unerwünschten 16 Bits eliminieren müssen.
Mein Rat ist, zuerst an der Qualität Ihrer Programme zu arbeiten und sich nur um die Optimierung zu kümmern, wenn dies gerechtfertigt ist und Sie zusätzliche Zeit in Ihrem Zeitplan haben.
Die Verwendung von% short
garantiert nicht, dass die tatsächlichen Werte kleiner als die des Typs int
sind. Es erlaubt , dass sie kleiner sind und stellt sicher, dass sie nicht größer sind. Beachten Sie auch, dass short
größer oder gleich groß sein muss, um char
einzugeben.
Die ursprüngliche Frage enthält die tatsächlichen Größen für den betreffenden Prozessor. Wenn Sie jedoch Code in eine neue Umgebung portieren, können Sie sich nur auf schwache relative Annahmen verlassen, ohne die implementierungsdefinierten Größen zu überprüfen.
Der C-Header <stdint.h>
- oder aus C ++ <cstdint>
- Definiert Typen der angegebenen Größe, z. B. uint8_t
für einen vorzeichenlosen, ganzzahligen Typ, der genau acht Bit breit ist. Verwenden Sie diese Typen, wenn Sie versuchen, ein extern spezifiziertes Format wie ein Netzwerkprotokoll oder ein binäres Dateiformat zu verwenden.
Der kurze Typ ist sehr nützlich, wenn Sie ein großes Array mit ihnen haben und int ist einfach viel zu groß.
Da das Array groß genug ist, ist die Speicherersparnis wichtig (anstatt nur ein Array von Ints zu verwenden).
Unicode-Arrays werden auch in Kurzform codiert (obwohl andere Kodierungsschemata existieren).
Bei eingebetteten Geräten spielt der Platz immer noch eine Rolle, und kurz könnte sehr nützlich sein.
Last but not least bestehen einige Übertragungsprotokolle darauf, Shorts zu benutzen, also brauchen Sie sie immer noch dort.
Tags und Links c++