iPhoneのエンディアン?


10

iPhone(およびiPad)はARMプロセッサで動作することを知っています。ARMプロセッサはデフォルトでリトルエンディアンです(Wikipediaページによると、iOS自体はリトルエンディアンです)。ただし、ARMプロセッサにはリトルエンディアンとビッグエンディアンを切り替える機能があると考えられます。これはどの程度可能であり、どのように機能しますか?


1
この質問への回答は、問題を解決したり、iPhoneの使用体験を改善するのにどのように役立ちますか 開発者以外のエンドユーザーの現実の懸念に対処する場合、それがどれほど技術的なものであるかは問題ではありませんが、質問が開発者のみに関心がある場合は、ここではトピック外です。
ダニエル

それでは、それをstackoverflowに移動する必要がありますか?
slartibartfast

2
@myrkosまたはsuperuser.com
Dan J

6
最初に質問を研ぎましょう。私たちは長い答えを誘う短い質問を探しています。これはすべてのサイトに適用されます。SuperUserは、iOSに関する一般的な質問の場所ではありません。私たちはiOSでハードウェアの質問をするのに最適な場所です。特定のプログラミングの問題がある場合は、その質問をして、iOSハードウェアのエンディアンが特定のプログラミングの質問にどのように影響しているかを説明するのがよいでしょう[SOとここではフォーラムはありません]。この問題に関するユーザーの視点が必要な場合、この質問よりもサイトがその質問を格納するのに適しているとは思えません。
bmike

2
「ARMは、モバイルデバイスで広く使用されているリトルエンディアンの32ビットRISCアーキテクチャです。ここで少し注意してください。ARMはバイエンディアン(バイトセクシャル、可能であれば)です。エンディアンを最低レベルから切り替えることができます。 iOSがそれをリトルエンディアンとして使用していることが起こります。ベースバンドチップ(少なくともオリジナルのiPhoneではARMコアでもありますが、他のiPhoneには対応していません)がビッグエンディアンであることを思い出しているようです。 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

エンディアンネスは、エンドユーザーが実際に操作するものではありませんが、アップル製品のユーザーにとってこれが何を意味するかについて、10,000フィートの要約があります。

簡単に言えば、内部プロセッサのエンディアンは、言語の記述方向と同じです。あなたが英語のテキストの文字を見るとき、私たちは皆、左上から始め、最初に右、次に下に読むことに同意します。他の言語は右から始まり、左に読みいくつかは左または右に移動する前に最初に読みます

アドレスまたは数値の内部表現のビットがリトルエンディアンまたはビッグエンディアンに格納されているかどうかは、ユーザーにとって重要ではありません。実際、MacのOS Xはビッグエンディアン表現に準拠し、iOSはリトルエンディアンの順序に準拠しています。この事実は、2つのデバイスが正しく連携できないことを意味するものではありません。これが機能するのは、この表現が内部でのみ発生し、ユーザーとして公開されないためです。


10
PowerPC上のOSXはビッグエンディアンで、Intelではリトルエンディアンです。
zaph 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.