2009-05-27 13 views
11

Dlaczego niektórzy manifacturers procesor zdecyduje się użyćJakie są zalety różnych endiannesses?

  • little endian
  • big endian
  • Bliskiego endian
  • Wszelkie inne?

?

Słyszałem, że z dużym endianinem można dowiedzieć się szybciej, jeśli liczba jest ujemna lub pozytywna, ponieważ ten bit jest pierwszy. (Nie ma to znaczenia w przypadku współczesnych procesorów, ponieważ nie można uzyskać dostępu do pojedynczego bitu.)

+5

Czy środkowy endian ma jajko na swojej stronie i rozbija je na środku? – workmad3

+0

Środkowy endian to schemat używany przez PDP-11: Bity 15..8, a następnie 7..0, 31..24, 23..16. – finnw

+0

Więc środkowy endian jest tylko 16-bitowym małym endianem –

Odpowiedz

15

Zaleta małej endianiczności polega na tym, że zmienną można odczytać jako dowolną długość przy użyciu tego samego adresu.

Na przykład zmienna 32-bitowa może być odczytywana jako 8-bitowa lub 16-bitowa zmienna bez zmiany adresu. To może przynieść ograniczone korzyści w dzisiejszych czasach, ale w czasach asemblera i ograniczonej pamięci może to być znacząca zaleta.

+1

A co z dużym endiansem? –

+0

Nie jestem pewien, czy istnieje duża korzyść dla big endian, poza kompatybilnością z innymi systemami. W większości języków wysokiego poziomu endianness i tak nie ma znaczenia –

+8

Jedną z zalet big-endian jest to, że możesz czytać wartości 16-bitowe i 32-bitowe, jak większość ludzi; od lewej do prawej. Zrzut pamięci składający się z 4 bajtów z napisem 'ffaa8800' jest w rzeczywistości' 0xffaa8800', a nie '0x0088aaff', tak jak mały-endian. – PeyloW

1

Korzystanie z endianowością procesora (bez względu na małą lub dużą) daje korzyści prędkości w arytmetyce: można dodać, odejmuj itd. liczby całkowite bezpośrednio w pamięci.

Korzystanie z predefiniowanej, zalecanej endianii (bez znaczenia, małej lub dużej) w formacie pliku daje korzyści z możliwości odczytu pliku w dowolnym systemie, bez względu na endianność procesora w innym systemie. Systemy z odpowiednią dokładnością mogą szybciej odczytać plik (jeśli procedura odczytu jest poprawnie napisana i zoptymalizowana), ale nawet systemy o niewłaściwej endianness mogą ją odczytać. Zwykle różnica prędkości jest pomijalna (z wyjątkiem bardzo dużych plików z dużą liczbą liczb całkowitych), więc dobrze jest najpierw zmierzyć maksymalny możliwy zysk prędkości optymalizując rutynę odczytu.

Niektóre formaty plików (na przykład TIFF) obsługują obie endianness. W takim przypadku dobrze jest wygenerować plik z endianizmem procesora, zakładając, że plik zostanie przetworzony na tym samym komputerze lub na podobnej maszynie.

+2

W rzeczywistości dla dużego pliku, nawet jeśli są to tylko liczby całkowite, będzie ograniczona szybkość, z jaką można odczytać z dysku lub sieci, jeśli jest to jedyne przetwarzanie potrzebne do do to swap ends. W rzeczywistości na nowoczesnych procesorach można wykonać o wiele więcej pracy, niż wolniej niż we/wy, dlatego często zapisywanie plików na dysku jest skompresowane, a dekompresowanie ich w locie podczas przetwarzania jest szybsze niż samo przetwarzanie nieskompresowanego pliku. –

+0

Czy możesz wyjaśnić, jak ważna jest Endianness do czytania plików. Jak to ma znaczenie, jeśli czytam plik tekstowy? – Geek

+2

Jeśli na przykład czytasz plik, który jest plikiem tekstowym przechowującym znaki UTF16LE (little endian), to jeśli twój format natywny był UTF16BE (duży), musisz odwrócić sens znaków w trakcie ich odczytu. Jednak, jak zauważa Curt Samson, prawdopodobnie nie robi to wielkiej różnicy, ponieważ prędkość procesora i pamięci głównej jest znacznie wyższa niż w przypadku dysku –

3

Nie ma szczególnych korzyści dla dużych lub małych endianów jako takich, z wyjątkiem użycia endianness rodzimego procesora lub obsługi określonej endianness pliku.

Powodem, dla którego zarówno duży, jak i mały endianizm współistnieją, jest to, że różni producenci mikroprocesorów stosowali różne konwencje do reprezentowania danych wielobajtowych i żaden standard nie pojawił się w tym czasie.

+0

o studiowaniu elektroniki, znam kolejność bitów, ale zamawianie bajtów wydaje się naprawdę egzotyczne. – user2284570

0

W małym endianie nie zawracasz sobie głowy zmianą adresu, ale w dużym endianie musisz: http://www.noveltheory.com/techpapers/endian.asp

Nie wiem, czy nadal mały endian ma przewagę nad dużym endianem w nowoczesnych procesorach. Ja-uważam, że zmiana adresu kosztuje moc mocy procesora :)

0

Pewne operacje zyskują dzięki dostępności części wartości przed inną częścią. Podczas dodawania dwóch niepodpisanych lub dwójkowych liczb uzupełniających, które są zbyt duże, aby odczytywać wszystkie naraz, dolne bity wyniku można obliczyć przed udostępnieniem górnych bitów, ale nie odwrotnie, co oznacza, że ​​porządek małego końca jest korzystny. Podczas uzyskiwania dostępu do układu szeregowego flash, dekodowanie wierszy może rozpoczynać się dopiero wtedy, gdy wszystkie bity, które definiują wiersz (zwykle wszystkie oprócz najmniej znaczących 8-12 bitów, w zależności od chipa) stają się dostępne, co oznacza, że ​​porządek big-endian jest korzystny tam.

+0

Współczesna logika pamięci RAM, dekodowania i wykonywania jest najczęściej szersza niż 8 bitów. Ma to sens tylko w starych lub wąskich magistralowych/seryjnych PIC. – Barry

+0

@Barry: Przypadki, które znam, gdzie little-endian jest korzystny, wynikają z możliwości rozpoczęcia operacji na niższych bitach liczby, zanim wszystkie wyższe bity są dostępne. Takie przypadki zdarzają się znacznie rzadziej dziś niż w przeszłości, ale fakt, że sprzęt wykorzystywany do korzystania z takich umiejętności jest prawie na pewno przyczyną, że mały endianin jest dziś powszechny. – supercat

Powiązane problemy