Endianness di iPhone?

8

So che gli iPhone (e gli iPad) funzionano su processori ARM, che sono little-endian di default (e iOS su se stesso è little-endian secondo la pagina di Wikipedia); tuttavia, i processori ARM presumibilmente hanno la capacità di passare da little-endian a big-endian. Quanto è possibile questo e come funziona?

    
posta slartibartfast 04.05.2012 - 00:16
fonte

2 risposte

5

anche se pensi di non aver bisogno di sapere l'endianità che qualcuno potrebbe fare. Non c'è bisogno di spiegare perché qualcuno non ne ha bisogno perché potresti non conoscere il contesto. La domanda non è "ho bisogno di sapere l'endianità", ma piuttosto "è big o little endian". Quindi concentrati sull'argomento per favore!

Detto questo probabilmente è la migliore pratica se non re-inventiamo la ruota e basiamo solo sulle macro che Apple fornisce per questo. Il motivo è perché hanno speso un bel po 'di tempo per ottimizzare questi macro e hanno fatto in modo che funzionasse bene con il simulatore così come su Mac, iPhone e tutti i loro sistemi operativi e hardware.

Se osservi cosa succede quando invochi CFSwapInt16BigToHost potresti vedere dei commenti che suggeriscono che queste macro producono probabilmente il miglior codice macchina che puoi ottenere con l'aiuto dell'ottimizzazione del compilatore:

OS_INLINE
uint16_t
_OSSwapInt16(
    uint16_t        data
)
{
  /* Reduces to 'rev16' with clang */
  return (uint16_t)(data << 8 | data >> 8);
}

OS_INLINE
uint32_t
_OSSwapInt32(
    uint32_t        data
)
{
#if defined(__llvm__)
  data = __builtin_bswap32(data);
#else
  /* This actually generates the best code */
  data = (((data ^ (data >> 16 | (data << 16))) & 0xFF00FFFF) >> 8) ^ (data >> 8 | data << 24);
#endif

  return data;
}
    
risposta data 26.08.2015 - 08:40
fonte
2

Endianness non è qualcosa con cui gli utenti finali hanno una vera interazione - ma ecco un riassunto di 10.000 piedi di ciò che questo significa per gli utenti dei prodotti Apple.

In poche parole - endianness per un processore interno è lo stesso della direzione di scrittura per una lingua. Quando guardi le lettere di un testo inglese, siamo tutti d'accordo per iniziare in alto a sinistra e leggere prima a destra e poi verso il basso. Altre lingue iniziano a destra e leggono a sinistra e alcuni leggono anche prima prima di spostarsi a sinistra o a destra .

Non ha importanza per un utente se i bit di una rappresentazione interna di un indirizzo o di un numero vengono memorizzati come little endian o big endian. In realtà OS X su un Mac aderisce a una rappresentazione big-endian e iOS aderisce all'ordinamento little-endian . Questo fatto non significa in alcun modo che i due dispositivi non possano funzionare correttamente. Funziona perché questa rappresentazione avviene solo internamente e non viene esposta a noi come utenti.

    
risposta data 04.05.2012 - 21:03
fonte

Leggi altre domande sui tag