Endianness of iPhones?


10

ฉันรู้ว่า iPhones (และ iPads) ทำงานบนโปรเซสเซอร์ ARM ซึ่งเป็นค่าเริ่มต้นเล็กน้อย (และ iOS ในตัวเองเป็นค่าใช้จ่ายต่ำสุดตามหน้า Wikipedia) อย่างไรก็ตามตัวประมวลผล ARM ควรจะมีความสามารถในการสลับไปมาระหว่างผู้ที่ยังไม่บรรลุนิติภาวะและผู้มีรายได้สูง เป็นไปได้อย่างไรและมันทำงานอย่างไร


1
คำตอบสำหรับคำถามนี้มีประโยชน์อย่างไรในการแก้ปัญหาหรือปรับปรุงประสบการณ์การใช้ iPhone ของคุณ ถ้ามันจัดการกับความกังวลในโลกแห่งความจริงของผู้ใช้ที่ไม่ใช่นักพัฒนามันไม่สำคัญว่ามันจะเป็นเรื่องทางเทคนิค แต่ถ้าคำถามนี้เป็นที่สนใจของนักพัฒนาเท่านั้นมันไม่ใช่หัวข้อที่นี่
แดเนียล

ตกลงแล้วฉันควรย้ายไปที่ stackoverflow หรือไม่
slartibartfast

2
@myrkos หรือsuperuser.com
Dan J

6
เรามาแปลงคำถามให้ดีก่อน เรากำลังมองหาคำถามสั้น ๆ ที่เชิญตอบยาว ๆ สิ่งนี้ใช้ได้กับทุกไซต์ SuperUser ไม่ใช่ที่สำหรับคำถาม iOS ในประเภททั่วไป เราเป็นที่ที่ดีที่สุดสำหรับคำถามเกี่ยวกับฮาร์ดแวร์บน iOS หากคุณมีปัญหาในการเขียนโปรแกรมโดยเฉพาะให้ถามคำถามนั้นและอธิบายว่าปัญหาฮาร์ดแวร์ iOS ของคุณส่งผลกระทบต่อคำถามการเขียนโปรแกรมเฉพาะของคุณอย่างไรบ้างเป็นวิธีที่จะไป [SO ไม่ใช่ที่นี่คือฟอรัมในกรณีนั้น] หากคุณต้องการมุมมองของผู้ใช้ในเรื่องนี้มันยากที่จะเห็นเว็บไซต์ใด ๆ ที่เป็นสถานที่ที่ดีกว่าที่บ้านคำถามนั้นกว่าที่นี่
bmike

2
"ARM เป็นสถาปัตยกรรม RISC แบบ 32 บิตที่ใช้กันอย่างแพร่หลายในอุปกรณ์พกพาต้องทำโน้ตเล็ก ๆ ที่นี่: ARM คือ bi-endian (bytesexual ถ้าคุณต้องการ) คุณสามารถสลับ endianness จากระดับต่ำสุดได้ เพิ่งเกิดขึ้นที่ iOS ใช้มันเป็น endian เล็ก ๆ น้อย ๆ ฉันดูเหมือนจะจำชิปเบสแบนด์ (ซึ่งเป็นแกน ARM อย่างน้อยกับ iPhone ดั้งเดิม - ไม่เคยจัดการกับคนอื่น) เป็น endian ใหญ่จริง ๆ แล้วคุณสามารถ ไม่ต้องทำสิ่งนี้ในระดับต่อกระบวนการ IIRC อย่างที่คุณสามารถทำได้ด้วย PowerPC (เช่น huuuuge perk สำหรับอีมูเลเตอร์) " news.ycombinator.com/item?id=1527676
0x6A75616E

คำตอบ:


6

แม้ว่าคุณคิดว่าคุณไม่จำเป็นต้องรู้ว่าใครบางคนอาจทำ endianness ไม่จำเป็นต้องอธิบายว่าทำไมบางคนถึงไม่ต้องการเพราะคุณอาจไม่รู้บริบท คำถามไม่ได้ "ฉันต้องรู้ endianness" แต่ค่อนข้าง "เป็น endian น้อยหรือใหญ่" ดังนั้นจงมุ่งความสนใจไปที่หัวเรื่อง!

ต้องบอกว่าอาจเป็นวิธีที่ดีที่สุดถ้าเราไม่คิดค้นล้อใหม่และพึ่งมาโครที่ Apple เตรียมไว้ให้ เหตุผลก็เพราะพวกเขาใช้เวลาพอสมควรในการปรับแต่งมาโครเหล่านี้และทำให้แน่ใจว่าทำงานได้ดีกับตัวจำลองรวมทั้งบน Mac, iPhone และระบบปฏิบัติการและฮาร์ดแวร์ทั้งหมด

หากคุณขุดสิ่งที่เกิดขึ้นเมื่อคุณเรียกใช้CFSwapInt16BigToHostคุณอาจเห็นความคิดเห็นที่แนะนำมาโครเหล่านี้อาจสร้างรหัสเครื่องที่ดีที่สุดที่คุณจะได้รับด้วยความช่วยเหลือของการปรับแต่งคอมไพเลอร์:

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 ไม่ใช่สิ่งที่ผู้ใช้ปลายทางมีการโต้ตอบจริง ๆ ด้วย - แต่นี่เป็นบทสรุป 10,000 ฟุตของสิ่งที่มีความหมายสำหรับผู้ใช้ผลิตภัณฑ์ Apple

สรุป - endianness สำหรับตัวประมวลผลภายในจะเหมือนกับทิศทางการเขียนสำหรับภาษา เมื่อคุณดูตัวอักษรของข้อความภาษาอังกฤษเราทุกคนตกลงที่จะเริ่มต้นที่ด้านบนซ้ายและอ่านก่อนแล้วจึงลง ภาษาอื่น ๆ เริ่มต้นที่ด้านขวาและอ่านไปทางซ้ายและบางคนยังอ่านลงครั้งแรกก่อนที่จะย้ายไปทางซ้ายหรือขวา

ไม่สำคัญสำหรับผู้ใช้หากบิตในการแสดงที่อยู่หรือหมายเลขภายในได้รับการจัดเก็บ endian น้อยหรือ endian ใหญ่ ในความเป็นจริงOS X บนปฏิบัติตาม Mac เพื่อเป็นตัวแทน big-และปฏิบัติ iOS เพื่อการสั่งซื้อน้อย ความจริงเรื่องนี้ไม่ได้หมายความว่าอุปกรณ์ทั้งสองไม่สามารถทำงานร่วมกันได้อย่างถูกต้อง ทำงานได้เนื่องจากการแสดงนี้เกิดขึ้นภายในเท่านั้นและไม่ได้รับการเปิดเผยจากเราในฐานะผู้ใช้


10
OSX บน PowerPC เป็น Big Endian สำหรับ Intel นั้นเป็น Little Endian
zaph
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.