Витривалість айфонів?


10

Я знаю, що iPhone (і iPad) працюють на процесорах ARM, які за замовчуванням є малоеквієнтними (а iOS сам по собі є мало-ендіанським відповідно до сторінки Вікіпедії); однак, процесори ARM, мабуть, мають можливість перемикатися між маленьким та великим ендіаном. Наскільки це можливо і як це працює?


1
Як відповідь на це питання може бути корисною для вирішення проблеми або покращення вашого досвіду використання iPhone? Якщо він стосується реального занепокоєння кінцевого споживача, який не розробник, це не має значення, наскільки це технічно, але якщо питання цікавить тільки розробників, це тут поза темою.
Даниїл

Гаразд, тоді я повинен перемістити його на stackoverflow?
slartibartfast

2
@myrkos Або superuser.com
Dan J

6
Давайте загостримо спочатку питання. Ми шукаємо короткі запитання, на які пропонується довга відповідь. Це стосується всіх сайтів. SuperUser взагалі не місце для будь-яких питань про iOS. Ми найкраще місце для апаратних питань на iOS. Якщо у вас є конкретна проблема програмування, тоді це питання і пояснення, як впливає апаратне забезпечення iOS на ваше конкретне питання програмування, було б шляхом пройти [ТАК, а не в цьому випадку є форумом]. Якщо ви хочете, щоб користувач розглядав це питання, важко бачити, що будь-який сайт є кращим місцем для вирішення цього питання, ніж тут.
bmike

2
"ARM - це 32-розрядна архітектура RISC, яка мало використовується, мобільні пристрої. Тут потрібно зробити невелику примітку: ARM є бієндіанським (якщо ви хочете, якщо ви хочете); ви можете переключити термін дії з найнижчого рівня. Це просто трапляється, що iOS використовує це як маленький ендіан. Я, мабуть, пам’ятаю чіп базової смуги (який також є ядром ARM, принаймні з оригінальним iPhone - ніколи не мав справу з іншими), але, на жаль, можна "робити це не на рівні процесу, IIRC, як ви можете з PowerPC (велика вигода для емуляторів)." news.ycombinator.com/item?id=1527676
0x6A75616E

Відповіді:


6

навіть якщо ви думаєте, що вам не потрібно знати цілеспрямованість, яку хтось може зробити. Не потрібно пояснювати, чому комусь це не потрібно, оскільки ви, можливо, не знаєте контексту. Питання не в тому, "чи потрібно мені знати ендіанство", а в тому, "чи це великий чи маленький ендіанець"? Тож зосередьтесь на темі, будь ласка!

Сказавши, що, мабуть, це найкраща практика, якщо ми не винаходимо колесо і просто покладаємось на макроси, які 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.

Коротше кажучи - витримка для внутрішнього процесора така ж, як і напрям написання мови. Коли ви дивитесь на букви англійського тексту, ми всі погоджуємось починати зліва вгорі і читати спочатку праворуч, а потім вниз. Інші мови починаються праворуч і читаються зліва, а деякі навіть читаються спочатку, перш ніж рухатися вліво або вправо .

Користувачеві це не важливо, якщо біти у внутрішньому представленні адреси чи числа зберігаються мало ендіаном чи великим ендіаном. Насправді OS X на Mac дотримується представництва big-endian, а iOS дотримується впорядкування мало-ендіанських . Цей факт жодним чином не означає, що два пристрої не можуть нормально працювати разом. Це працює, тому що це представлення відбувається лише внутрішньо і не піддається впливу нас як користувачів.


10
OSX на PowerPC - Big Endian, для Intel - Little Endian.
zaph
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.