Verwendung von 'short' in C ++

8

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?

    
user225312 05.12.2009, 07:30
quelle

5 Antworten

18

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).

    
Greg Hewgill 05.12.2009, 07:35
quelle
12

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.

    
Matthew 05.12.2009 07:44
quelle
1

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.

    
Thomas Matthews 05.12.2009 19:18
quelle
1

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.

    
seh 06.12.2009 13:53
quelle
0

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.

    
Toad 05.12.2009 07:44
quelle

Tags und Links