Eu sei que os iPhones (e iPads) são executados em processadores ARM, que são little-endian por padrão (e o iOS em si é little-endian, de acordo com a página da Wikipedia); no entanto, os processadores ARM supostamente têm a capacidade de alternar entre little-endian e big-endian. Quão possível é isso e como funciona?
10
Respostas:
mesmo que você ache que não precisa conhecer a perseverança que alguém pode fazer. Não é necessário explicar por que alguém não precisa, porque você pode não conhecer o contexto. A questão não é "eu preciso conhecer endianness", mas "é endian grande ou pequeno"? Então concentre-se no assunto, por favor!
Dito isto, provavelmente é a melhor prática se não reinventarmos a roda e confiarmos nas macros que a Apple fornece para isso. O motivo é que eles gastaram bastante tempo para otimizar essas macros e certificaram-se de que funcionassem bem com o simulador, bem como no Mac, iPhone e em todos os SOs e hardwares.
Se você descobrir o que está acontecendo quando você chamar,
CFSwapInt16BigToHost
poderá ver comentários que sugerem que essas macros estão produzindo provavelmente o melhor código de máquina que você pode obter com a ajuda da otimização do compilador:fonte
Endianness não é algo com o qual os usuários finais tenham qualquer interação real - mas aqui está um resumo de 10.000 pés do que isso significa para usuários de produtos Apple.
Em poucas palavras, o endianness para um processador interno é o mesmo que a direção de escrita para um idioma. Quando você olha as letras de um texto em inglês, todos concordamos em começar no canto superior esquerdo e ler primeiro à direita e depois para baixo. Outros idiomas começam à direita e leem para a esquerda e alguns até leem primeiro antes de mover para a esquerda ou direita .
Realmente não importa para o usuário se os bits em uma representação interna de um endereço ou número são armazenados como little endian ou big endian. De fato, o OS X em um Mac adere a uma representação de big endian e o iOS adere a pedidos de little endian . Esse fato não significa que os dois dispositivos não possam funcionar juntos corretamente. Isso funciona porque essa representação acontece apenas internamente e não é exposta a nós como usuários.
fonte