2009-05-27 8 views
11

Warum haben einige Prozessor manifacturersWas sind die Vorteile der verschiedenen Endianess?

  • Little Endian
  • Big Endian
  • Middle Endian
  • alle anderen zu benutzen?

?

Ich habe gehört, dass mit Big Endian man schneller herausfinden kann, ob eine Zahl negativ oder positiv ist, weil dieses Bit das erste ist. (Dies ist bei modernen CPUs unwichtig, da auf einzelne Bits nicht mehr zugegriffen werden kann.)

+5

Ist Mittelendian, wo Sie Ihr Ei auf seiner Seite haben und es in der Mitte brechen? – workmad3

+0

Middle Endian ist das von der PDP-11 verwendete Schema: Bits 15..8, dann 7..0, 31..24, 23..16. – finnw

+0

Also Middle Endian ist nur 16 Bit Little Endian –

Antwort

15

Der Vorteil von Little Endianness ist, dass eine Variable als eine beliebige Länge mit der gleichen Adresse gelesen werden kann.

Zum Beispiel kann eine 32-Bit-Variable als 8-Bit- oder 16-Bit-Variable gelesen werden, ohne die Adresse zu ändern. Dies kann in diesen Tagen begrenzten Nutzen hat, aber in den Tagen des Assembler und begrenzten Speichers könnte es einen signifikanten Vorteil

+1

Was ist mit Big Endian? –

+0

Ich bin mir nicht sicher, ob Big Endian einen tatsächlichen Vorteil hat, abgesehen von der Kompatibilität mit anderen Systemen. In den meisten High-Level-Sprachen ist die Endianz sowieso irrelevant. –

+8

Ein Vorteil von Big-Endian ist, dass Sie 16-Bit- und 32-Bit-Werte lesen können, wie es die meisten Menschen tun; von links nach rechts. Ein Speicher-Dump von 4 Bytes, der 'ffaa8800' sagt, ist eigentlich '0xffaa8800' und nicht' 0x0088aaff', wie Little-Endian wäre. – PeyloW

1

Die Verwendung der Endianess der CPU (egal ob klein oder groß) gibt Ihnen den Geschwindigkeitsvorteil bei der Arithmetik: Sie können hinzufügen, subtrahieren usw. Multibyte-Ganzzahlen direkt im Speicher.

Die Verwendung einer vordefinierten, vorgeschriebenen Endianz (egal ob klein oder groß) in einem Dateiformat bietet Ihnen den Vorteil, dass Sie die Datei auf jedem System lesen können, unabhängig von der Endianität der CPU des anderen Systems. Systeme mit der richtigen Endianess können die Datei schneller lesen (wenn die Lese-Routine korrekt geschrieben und optimiert wurde), aber auch Systeme mit der falschen Endianness können sie lesen. Normalerweise ist die Geschwindigkeitsdifferenz vernachlässigbar (außer bei sehr großen Dateien mit vielen Ganzzahlen), daher ist es eine gute Idee, zuerst die maximal mögliche Geschwindigkeitsverstärkung zu messen, um die Lese-Routine zu optimieren.

Einige Dateiformate (z. B. TIFF) unterstützen beide Enden. In diesem Fall empfiehlt es sich, die Datei mit der Endlichkeit der CPU zu erstellen, vorausgesetzt, die Datei wird auf demselben oder einem ähnlichen Computer nachbearbeitet.

+2

Eigentlich, für eine große Datei, auch wenn nur ganze Zahlen, werden Sie durch die Geschwindigkeit begrenzt sein, mit der Sie es von der Festplatte oder Netzwerk lesen können, wenn die einzige Verarbeitung Sie benötigen Tun ist Ende. Tatsächlich können Sie auf modernen CPUs viel mehr Arbeit erledigen, als Sie benötigen, bevor Sie langsamer als Ihre E/A sind. Aus diesem Grund ist das Speichern von komprimierten Dateien und das schnelle Dekomprimieren während der Verarbeitung schneller als einfach eine unkomprimierte Datei verarbeiten. –

+0

Können Sie bitte erklären, wie Endianess wichtig für das Lesen von Dateien ist. Wie ist es wichtig, wenn ich eine Textdatei lese? – Geek

+2

Nun, wenn Sie zum Beispiel eine Datei lesen, die eine Textdatei ist, die UTF16LE-Zeichen (Little Endian) speichert, dann müssten Sie, wenn Ihr ursprüngliches Format UTF16BE (groß) wäre, den Sinn der Zeichen beim Einlesen umkehren. Wie Curt Samson jedoch hervorhebt, macht dies wahrscheinlich wenig Unterschied, da die Geschwindigkeit der CPU und des Hauptspeichers viel höher ist als die der Platte –

3

Es gibt keinen besonderen Vorteil von großen oder kleinen Endian als solche, außer der Verwendung nativer CPU-Endianess oder Handhabung der angegebenen Dateiendianess.

Der Grund, warum sowohl Big als auch Little Endian koexistieren, liegt darin, dass verschiedene CPU-Hersteller unterschiedliche Konventionen für die Darstellung von Multibyte-Daten verwendeten und zu diesem Zeitpunkt kein Standard aufkam.

+0

mit dem Studium der Elektronik, bin ich vertraut mit Bit-Bestellung, aber Byte-Reihenfolge scheint wirklich exotisch. – user2284570

0

In Little-Endian, die Sie nicht die Mühe, um die Adresse zu ändern, aber in Big-Endian müssen Sie: http://www.noveltheory.com/techpapers/endian.asp

Ich weiß eigentlich nicht, ob immer noch kleine Endian hat Vorteil gegenüber Big Endian in modernen CPUs. Ich -nively- denke, dass das Umschalten der Adresse kostet die CPU Picowatts der Macht :)

0

Bestimmte Operationen profitieren davon, dass Teile eines Wertes vor einem anderen Teil zur Verfügung stehen. Wenn zwei vorzeichenlose oder Zweierkomplement-Zahlen hinzugefügt werden, die zu groß sind, um alle auf einmal zu lesen, können die unteren Bits des Ergebnisses berechnet werden, bevor die oberen Bits verfügbar sind, aber nicht umgekehrt, was bedeutet, dass die Little-Endian-Ordnung dort vorteilhaft ist. Wenn auf einen seriellen Flash-Chip zugegriffen wird, kann die Zeilendecodierung nur beginnen, wenn alle Bits verfügbar sind, die die Reihe definieren (typischerweise alle bis auf die niedrigstwertigen 8-12 Bits, abhängig vom Chip), was bedeutet, dass die Big-Endian-Reihenfolge vorteilhaft ist Dort.

+0

Moderne RAM-, Decodier- und Ausführungslogik ist meistens weit mehr als 8 Bit breit. Es macht nur Sinn auf alten oder schmalen Bus/seriellen PICs. – Barry

+0

@Barry: Die Fälle, in denen ich weiß, wo Little-Endian vorteilhaft ist, ergeben sich aus der Fähigkeit, Operationen an den unteren Bits einer Zahl zu starten, bevor alle oberen Bits verfügbar sind. Solche Fälle treten heute viel seltener auf als in den vergangenen Jahren, aber die Tatsache, dass Hardware, um von solchen Fähigkeiten zu profitieren, ist mit ziemlicher Sicherheit der Grund dafür, dass Little-Endian heute üblich ist. – supercat