아이폰의 엔디안?


10

필자는 기본적으로 리틀 엔디안 인 ARM 프로세서에서 iPhone (및 iPad)을 실행한다는 것을 알고 있습니다. Wikipedia 페이지에 따르면 iOS 자체는 리틀 엔디안입니다. 그러나 ARM 프로세서는 리틀 엔디안과 빅 엔디안간에 전환 할 수있는 기능이 있다고 생각합니다. 이것이 어떻게 가능하며 어떻게 작동합니까?


1
이 질문에 대한 답변이 문제를 해결하거나 iPhone 사용 경험을 향상시키는 데 어떻게 도움이됩니까? 개발자가 아닌 일반 사용자의 실제 관심사를 다루는 경우 기술의 중요성은 중요하지 않지만 질문이 개발자에게만 관심이 있다면 여기서는 논제입니다.
다니엘

좋아, 그럼 그것을 stackoverflow로 옮겨야합니까?
slartibartfast

2
@myrkos 또는 superuser.com
Dan J

6
먼저 문제를 구체화합시다. 우리는 긴 대답을 초대하는 짧은 질문을 찾고 있습니다. 이것은 모든 사이트에 적용됩니다. 수퍼 유저는 일반적으로 iOS 관련 질문에 대한 장소가 아닙니다. 우리는 iOS에서 하드웨어 질문에 가장 적합한 곳입니다. 특정 프로그래밍 문제가있는 경우 해당 질문을하고 iOS 하드웨어 엔디안이 특정 프로그래밍 질문에 어떻게 영향을 미치는지 설명하는 방법이 될 것입니다 ([여기서는 포럼이 아닙니다). 이 문제에 대한 사용자 관점을 원한다면 여기보다 질문을 수용하기에 더 좋은 사이트를 찾기가 어렵습니다.
bmike

2
"ARM은 모바일 장치에서 널리 사용되는 리틀 엔디안, 32 비트 RISC 아키텍처입니다. ARM은 여기에서주의해야합니다. ARM은 바이 엔디안 (필요한 경우 바이트 성)이며 엔디안을 가장 낮은 수준에서 토글 할 수 있습니다. iOS가 리틀 엔디안으로 사용하는 경우가 발생하지만베이스 밴드 칩 (적어도 원래의 아이폰과는 전혀 다른 ARM을 다루지 않는 ARM 코어 임)이 빅 엔디안 인 것을 기억하는 것 같습니다. "PowerPC (에뮬레이터에 대한 특권)와 마찬가지로 프로세스 레벨 IIRC에서는이 작업을 수행하지 마십시오." news.ycombinator.com/item?id=1527676
0x6A75616E

답변:


6

당신이 누군가가 할 수있는 엔디안을 알 필요가 없다고 생각하더라도. 문맥을 모르기 때문에 왜 누군가가 필요하지 않은지 설명 할 필요가 없습니다. 문제는 "엔디안을 알아야 하는가"가 아니라 "엔디안이 크거나 작은가"입니다. 주제에 집중하세요!

바퀴를 재발 명하지 않고 Apple이 제공하는 매크로에 의존하는 것이 가장 좋은 방법 일 것입니다. 그 이유는 매크로를 최적화하는 데 많은 시간을 소비했으며 Mac, iPhone 및 모든 OS 및 하드웨어뿐만 아니라 시뮬레이터에서도 잘 작동하기 때문입니다.

호출 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 피트 요약 한 것입니다.

간단히 말해서 내부 프로세서의 엔디안은 언어의 쓰기 방향과 동일합니다. 영어 텍스트의 글자를 볼 때, 우리는 모두 왼쪽 상단에서 시작하여 먼저 오른쪽에서 아래로 읽는 것에 동의합니다. 다른 언어는 오른쪽에서 시작하여 왼쪽으로 읽고 일부는 먼저 왼쪽이나 오른쪽으로 이동하기 전에 아래로 읽습니다 .

주소 또는 숫자의 내부 표현에있는 비트가 리틀 엔디안 또는 빅 엔디안으로 저장되는 경우 실제로 사용자에게 중요하지 않습니다. 실제로 Mac의 OS X는 빅 엔디안 표현을 따르고 iOS는 리틀 엔디안 순서를 따릅니다 . 이 사실이 두 장치가 제대로 작동하지 않는다는 의미는 아닙니다. 이 표현은 내부적으로 만 발생하며 사용자로서 우리에게 노출되지 않기 때문에 작동합니다.


10
PowerPC의 OSX는 Big Endian이고 Intel에서는 Little Endian입니다.
zaph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.