2011-01-20 7 views
39

Perché sono ancora in uso sia il piccolo che il big-endian oggi, dopo circa 40 anni di computer science binario? Ci sono algoritmi o formati di archiviazione che funzionano meglio con uno e molto peggio con l'altro? Non sarebbe meglio se tutti passassimo a uno e lo seguissimo?Perché sono in uso sia il piccolo che il big-endian?

+0

Hai appena rubato le parole dalla mia bocca. :). Grazie – Soundararajan

+0

Se non avessimo ottenuto i nostri numeri da una lingua semitica, saremmo anche noi little-endian. – hoodaticus

risposta

29

Quando si aggiungono due numeri (su carta o in una macchina), si inizia con le cifre meno significative e si lavora verso le cifre più significative. (Lo stesso vale per molte altre operazioni).

Su Intel 8088, che aveva registri a 16 bit ma un bus dati a 8 bit, essendo little-endian permetteva a tali istruzioni di avviare l'operazione dopo il primo ciclo di memoria. (Ovviamente dovrebbe essere possibile che i recuperi di memoria di una parola avvengano in ordine decrescente anziché aumentare, ma sospetto che ciò avrebbe complicato un po 'il progetto.)

Nella maggior parte dei processori la larghezza del bus corrisponde alla larghezza del registro quindi questo non conferisce più un vantaggio.

I numeri big-endian, al contrario, possono essere confrontati a partire da MSB (sebbene molte istruzioni di confronto facciano effettivamente una sottrazione che deve comunque iniziare con l'LSB). Il bit del segno è anche molto facile da ottenere.

Esistono algoritmi o di stoccaggio formati che funzionano meglio con uno e molto peggio con l'altra?

No. Ci sono piccoli vantaggi qua e là ma niente di importante.

In realtà penso che litte-endian sia più naturale e coerente: il significato di un bit è 2^(bit_pos + 8 * byte_pos). Mentre con big endian il significato di un bit è 2^(bit_pos + 8 * (word_size - byte_pos - 1)).

Non sarebbe meglio se passassimo tutti a uno e continuassimo ad usarlo?

A causa del dominio di x86, abbiamo sicuramente gravitato verso little-endian. I chip ARM in molti dispositivi mobili hanno un carattere configurabile, ma sono spesso impostati su LE per essere più compatibili con il mondo x86. Che va bene per me.

+10

Non dimenticare la rete che funziona per lo più in BE – mathk

+0

Whoa, non ho mai saputo che i bit di ogni byte sono anche memorizzati meno significativi. Quindi 10 = 0x0A è davvero memorizzato come '01010000' e non binario 00001010? Questo è vero anche nei sistemi BE? – krubo

+0

@krubo La più piccola unità indirizzabile è il byte, quindi in realtà è completamente arbitrario come si considerano i bit da disporre. Il modo in cui i bit sono "memorizzati" all'interno di un byte dipende interamente dalla convenzione che si desidera seguire. Se porti la tua convenzione di scelta su carta, scriveresti il ​​valore 10 come 01010000 in Little Endian e come 00001010 in Big Endian. –

3

Sia big che little endian hanno i loro vantaggi e svantaggi. Anche se uno fosse chiaramente superiore (il che non è il caso), non c'è modo che nessuna architettura legacy sia mai in grado di cambiare l'endianità, quindi temo che tu debba imparare a conviverci.

+1

Sto cercando esempi, generici o specifici. – orlp

+1

little-endian è (spesso, ma non sempre) utile per le implementazioni bignum home-roll (cioè, utilizza numeri interi più grandi della parola word-size). – Vatine

12

Little Endian semplifica le tipografie. Ad esempio, se si dispone di un numero a 16 bit, è sufficiente trattare lo stesso indirizzo di memoria di un puntatore a un numero a 8 bit, poiché contiene gli 8 bit più bassi. Quindi non è necessario conoscere il tipo esatto di dati con cui si ha a che fare (anche se nella maggior parte dei casi lo si conosce comunque).

Big Endian è un po 'più leggibile. I bit vengono archiviati in memoria come appaiono in ordine logico (i valori più significativi per primi), proprio come per qualsiasi sistema numerico utilizzato dall'uomo.

In molti stati di astrazione molti argomenti non contano più. Penso che il motivo principale per cui abbiamo ancora entrambi sia che nessuno vuole passare. Non c'è una ragione ovvia per entrambi i sistemi, quindi perché cambiare qualcosa se il tuo vecchio sistema funziona perfettamente?

+2

In realtà non seguo il tuo commento di tipografie. – Artelius

+1

Su un sistema little-endian i bit meno significativi vengono prima in memoria. Quindi, puoi trattare questo puntatore di memoria come un valore a 8 bit (otterrai gli 8 bit meno significativi), il valore a 16 bit, ecc. Otterrai sempre il numero corretto di bit nell'ordine previsto. Sui sistemi big endian otterresti i bit più significativi, il che non è quello che ti aspetti dalla tipizzazione di un tipo di dati più grande a uno più piccolo. –

+1

Generalmente il typecasting viene eseguito nei registri, altrimenti non è possibile firmare l'estensione e così via, ad eccezione di un cast reinterpretato, nel qual caso hai ragione, tuttavia su alcune macchine big endian, un puntatore punta al ultimo byte di una parola, non la prima, che promuove solo tutta la confusione. – Artelius

Problemi correlati