2014-10-20 10 views
5

Ho un array char c[12] = {'a','b','c','d','e','f','g','h','0','1','2','3'} In esadecimale questi valori sarebbero {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x30, 0x31, 0x32, 0x33}Sarà un array di char differiscono per ordinare al piccolo sistema endian o big endian

Quello che chiedevo è se la matrice potrebbe essere memorizzata in memoria in modo diverso in un grande sistema endian o little endian?

Ho pensato che sarebbero stati gli stessi perché i sistemi endian funzionano determinando come memorizzare un elemento con il minimo o il più significativo bit di un singolo elemento nell'array e ordinano i byte, ma dal momento che un char è solo un byte singolo ordinano i byte allo stesso modo.

+0

"Un esempio di middle-endianness è il formato di data americano." ([cattiva src] (https://en.wikipedia.org/wiki/Endianness#Middle)) – Daniel

risposta

8

Pensa a cosa significano "big endian" e "little endian".

La memoria è una sequenza (o su macchine più interessanti, diverse sequenze) di byte. Per gli elementi di due o più byte di dimensioni, i byte dell'elemento possono essere archiviati in memoria in ordini diversi e i due ordini più ovvi sono chiamati "big endian" e "little endian" (se hai tre o più byte , quindi ci sono più di due ordini di byte possibili, e comunque, chi dice che i bit di un int per esempio non possono essere distribuiti su più byte in un ordine caotico, ma fisso?)

Ma per una sequenza di byte, l'ordine dei byte è l'ordine dei byte. "Big endian" e "little endian" sono definiti dal modo in cui i bit di un oggetto più grande sono disposti in una matrice di byte. Per una sequenza di byte, vengono memorizzati nell'ordine in cui sono memorizzati: non è possibile alcun altro ordine. È come chiedere "i numeri 1, 2, 3, 4 potrebbero essere diversi dai numeri 1, 2, 3, 4?" E ovviamente non possono.

1

gli array di carbone sono gli stessi su qualsiasi sistema ragionevole che tu abbia mai incontrato. Sono i tipi di dati multi-byte che hanno ordinamenti differemti. In passato esistevano sistemi con una strana endianità dei bit, ma non penso che nessuno di questi sia più realizzato.

+0

Come si rileva "strana endianità dei bit"? Come si può avere un sistema "irragionevole" in cui i byte non vengono ordinati nell'ordine in cui sono ordinati? – gnasher729

2

I byte devono avere indirizzi di memoria crescente (come visto dal programma C) nello stesso ordine in cui sono stati definiti.

3

Il char/byte è, per definizione, la più piccola unità di memoria indirizzabile. Di conseguenza, non esiste un concetto significativo di "endianità" all'interno di un singolo byte, perché il processore non può indicizzarvi al suo interno; può solo leggere il tutto. Singoli bit dall'interno di un byte sono ottenuti mediante operazioni matematiche, non tramite indirizzamento; la loro posizione fisica non ha nulla a che fare con il modo in cui vengono letti. Endianness si riferisce solo a oggetti multi-byte che hanno sottocomponenti, indicizzati, e quindi ordinati fisicamente.

Per definizione un array ha elementi in un solo ordine, altrimenti le operazioni di indicizzazione fallirebbero, quindi le nozioni di endianità della macchina per tipi più grandi che potrebbero ipoteticamente occupare lo stesso spazio non sono rilevanti neanche per questo, poiché distruggerebbero l'array regole di accesso.

Problemi correlati