İPhone'ların Endianitesi?


10

İPhone'ların (ve iPad'lerin) varsayılan olarak küçük endian olan ARM işlemcilerinde çalıştığını biliyorum (ve Wikipedia sayfasında kendi başına iOS küçük endian); ancak, ARM işlemcilerinin küçük endian ve big-endian arasında geçiş yapma yeteneği olduğu söyleniyor. Bu nasıl mümkün ve nasıl çalışıyor?


1
Bu sorunun cevabı bir sorunu çözmek veya iPhone kullanma deneyiminizi geliştirmek için nasıl yardımcı olabilir? Geliştirici olmayan bir son kullanıcının bazı gerçek dünya endişelerini giderirse, ne kadar teknik olduğu önemli değildir, ancak soru sadece geliştiricilere ilgi duyuyorsa, konu dışıdır.
Daniel

Tamam, o zaman yığın akışına taşımalıyım?
slartibartfast

2
@ myrkos Veya superuser.com
Dan J

6
Önce soruyu netleştirelim. Uzun bir cevabı davet eden kısa sorular arıyoruz. Bu, tüm siteler için geçerlidir. SuperUser, genel olarak herhangi bir tür iOS sorusunun yeri değildir. İOS'ta donanım soruları için en iyi yeriz. Belirli bir programlama sorununuz varsa, bu soruyu sormak ve iOS donanım endianitesinin özel programlama sorunuzu nasıl etkilediğini açıklamak, [SO ve burada bu durumda forum değil] yolunun yolu olacaktır. Bu konu hakkında bir kullanıcı perspektifi istiyorsanız, herhangi bir sitenin bu soruyu barındırmak için buradakinden daha iyi bir yer olduğunu görmek zordur.
bmike

2
"ARM, mobil cihazlar tarafından yaygın olarak kullanılan küçük bir endian, 32 bit RISC mimarisidir. Burada küçük bir not almalıyız: ARM, iki endian (eğer isterseniz byteseksüel); endianizmi en düşük seviyeden değiştirebilirsiniz. Sadece iOS'un küçük endian olarak kullandığını görüyorum.Aslında, temel bant çipini (aynı zamanda bir ARM çekirdeği, en azından orijinal iPhone ile - asla diğerleriyle ilgilenmediğim) büyük endian olduğunu hatırlıyorum. bunu işlem başına düzeyde, IIRC, PowerPC (emülatörler için bir huuuuge perk) ile yapabileceğiniz gibi yapmayın. " news.ycombinator.com/item?id=1527676
0x6A75616E

Yanıtlar:


6

birisinin yapabileceği endianlığı bilmenize gerek olmadığını düşünseniz bile. Birinin neden buna ihtiyacı olmadığını açıklamaya gerek yok çünkü bağlamı bilmiyor olabilirsiniz. Soru "endianlığı bilmem gerekiyor mu" değil, "büyük ya da küçük endian mı?" Lütfen konuya konsantre olun!

Tekerleği yeniden icat etmez ve Apple'ın bunun için sağladığı makrolara güvenirsek, muhtemelen en iyi uygulama olduğunu söylemiştik. Bunun nedeni, bu makroları optimize etmek için oldukça zaman harcadıkları ve simülatör, Mac, iPhone ve tüm işletim sistemleri ve donanımlarında iyi çalıştığından emin olmalarıdır.

Çağırdığınızda neler olduğunu kazarsanız CFSwapInt16BigToHost, bu makroların derleyici optimizasyonunun yardımıyla alabileceğiniz en iyi makine kodunu ürettiğini gösteren yorumları görebilirsiniz:

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;
}

3

Endianness, son kullanıcıların gerçek bir etkileşimi olan bir şey değildir - ancak bu, Apple ürünlerinin kullanıcıları için ne anlama geldiğinin 10.000 feet'lik bir özetidir.

Özetle, bir iç işlemci için endianness bir dilin yazma yönüyle aynıdır. İngilizce bir metnin harflerine baktığınızda, hepimiz sol üstte başlamayı ve önce sağ sonra aşağı okumanızı kabul ederiz. Diğer diller sağdan başlar ve sola okur ve hatta bazıları sola veya sağa hareket etmeden önce aşağıya okur .

Bir adresin veya numaranın dahili temsilindeki bitlerin küçük endian veya büyük endian depolaması bir kullanıcı için önemli değildir. Aslında bir Mac'teki OS X, büyük endian temsiline, iOS ise küçük endian siparişine bağlı . Bu gerçek, hiçbir şekilde iki cihazın birlikte düzgün çalışamayacağı anlamına gelmez. Bu, bu temsilin yalnızca dahili olarak gerçekleştiği ve bize kullanıcı olarak açıklanmadığı için işe yarar.


10
PowerPC'deki OSX Big Endian, Intel'de Little Endian.
zaph
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.