2009-05-27 14 views
11

Perché alcuni costruttori dei processori decidono di utilizzareQuali sono i vantaggi delle diverse endianness?

  • little endian
  • big endian
  • Medio endian
  • Altro?

?

Ho sentito che con big endian si può scoprire più velocemente, se un numero è negativo o positivo, perché quel bit è il primo. (Questo non importa sulle CPU moderne, dato che non è più possibile accedere a singoli bit.)

+5

Is Middle Endian dove hai il tuo uovo al suo fianco e spezzalo nel mezzo? – workmad3

+0

Middle endian è lo schema utilizzato dal PDP-11: Bit 15..8, quindi 7..0, 31..24, 23..16. – finnw

+0

Quindi il middle endian è solo 16 bit little endian –

risposta

15

Il vantaggio di little endianness è che una variabile può essere letta come qualsiasi lunghezza utilizzando lo stesso indirizzo.

Ad esempio una variabile a 32 bit può essere letta come variabile a 8 o 16 bit senza modificare l'indirizzo. Questo potrebbe avere un beneficio limitato in questi giorni, ma ai tempi dell'assembler e della memoria limitata potrebbe essere un vantaggio significativo

+1

Che dire di big endian? –

+0

Non sono sicuro che ci sia un vantaggio reale per big endian, oltre alla compatibilità con altri sistemi. Nella maggior parte dei linguaggi di alto livello, l'endianness è irrilevante in ogni caso –

+8

Uno dei vantaggi di big-endian è la possibilità di leggere valori a 16 e 32 bit come fa la maggior parte degli umani; da sinistra a destra. Un dump di memoria di 4 byte che dice 'ffaa8800' è in realtà' 0xffaa8800' non '0x0088aaff' come sarebbe little-endian. – PeyloW

1

L'utilizzo della CPU (non importa piccolo o grande) offre il vantaggio di velocità su aritmetica: è possibile aggiungere, sottrarre gli interi multibyte direttamente nella memoria.

L'utilizzo di un endianness predefinito e prestabilito (non importa piccolo o grande) in un formato di file offre il vantaggio di poter leggere il file su qualsiasi sistema, indipendentemente dalla endianità della CPU dell'altro sistema. I sistemi con l'endianità corretta possono leggere il file più velocemente (se la routine di lettura è scritta e ottimizzata correttamente), ma anche i sistemi con il lessico sbagliato possono leggerlo. Di solito, la differenza di velocità è trascurabile (tranne che per file molto grandi con molti interi), quindi è una buona idea misurare innanzitutto il massimo guadagno di velocità possibile per ottimizzare la routine di lettura.

Alcuni formati di file (ad esempio TIFF) supportano entrambi endianness. In questo caso è una buona idea generare il file con l'endianità della CPU, supponendo che il file venga post-elaborato sulla stessa macchina o una macchina simile.

+2

In realtà, per un file di grandi dimensioni, anche se solo per interi, si sarà limitati dalla velocità con cui è possibile leggerlo dal disco o dalla rete se l'unica elaborazione necessaria fare è scambiare le estremità. In effetti, sulle CPU moderne puoi fare molto più lavoro di quello prima di essere più lento del tuo I/O, che è il motivo per cui spesso i file memorizzati sul disco sono compressi e decomprimerli al volo mentre li processi è più veloce del semplice elaborare un file non compresso. –

+0

Puoi spiegare in che modo Endianness è importante per leggere i file. Che importanza ha se leggo un file di testo? – Geek

+2

Bene se per esempio stai leggendo un file che è un file di testo che memorizza caratteri UTF16LE (little endian), allora se il tuo formato nativo era UTF16BE (grande), dovresti invertire il senso dei caratteri mentre venivano letti. Tuttavia, come sottolinea Curt Samson, questo probabilmente fa poca differenza poiché la velocità della CPU e della memoria principale è molto più alta del disco. –

3

Non vi è alcun particolare vantaggio di big o little endian in quanto tale, ad eccezione dell'uso di endianness della CPU nativa o della gestione del file endianness specificato.

Il motivo per cui sia il grande che il piccolo endian coesistono è che diversi produttori di CPU hanno utilizzato convenzioni diverse per rappresentare i dati multibyte e non è emerso alcun standard al momento.

+0

avendo studiato elettronica, ho familiarità con l'ordine dei bit, ma l'ordinamento dei byte sembra davvero esotico. – user2284570

0

In little endian non ti preoccupare di cambiare l'indirizzo, ma in big endian devi: http://www.noveltheory.com/techpapers/endian.asp

In realtà non so se ancora little endian abbia vantaggi rispetto a big endian nelle moderne CPU. I -naively- penso che il cambio di indirizzo costi i picowatt di potenza della CPU :)

0

Alcune operazioni traggono vantaggio dall'avere parti di un valore disponibili prima di un'altra parte. Quando si aggiungono due numeri di complemento senza segno o due che sono troppo grandi per essere letti tutti contemporaneamente, i bit inferiori del risultato possono essere calcolati prima che i bit superiori siano disponibili, ma non viceversa, implicando che l'ordine little-endian è vantaggioso lì. Quando si accede a un chip flash seriale, la decodifica di riga può iniziare solo quando tutti i bit che definiscono la riga (in genere tutti tranne gli 8-12 bit meno significativi, a seconda del chip) diventano disponibili, il che implica che l'ordine big-endian è vantaggioso Là.

+0

La moderna memoria RAM, la decodifica e la logica di esecuzione sono spesso molto più larghe di 8 bit. Ha senso solo su bus vecchi o ristretti/PIC seriali. – Barry

+0

@Barry: I casi che conosco dove little-endian è vantaggioso derivano dalla possibilità di avviare operazioni sui bit inferiori di un numero prima che tutti i bit superiori siano disponibili. Questi casi nascono molto meno spesso oggi rispetto agli anni passati, ma il fatto che l'hardware utilizzato per beneficiare di tali capacità è quasi certamente la ragione per cui oggi little-endian è comune. – supercat

Problemi correlati