40

なぜ一部のアーキテクチャがリトルエンディアンを使用し、他のアーキテクチャはビッグエンディアンを使用するのか疑問に思っていました。パフォーマンスと関係があるとどこかで読んだことを覚えていますが、エンディアンがパフォーマンスにどのように影響するかわかりません。また、私はそれを知っています:

リトルエンディアン システムには、異なるアドレスを使用せずに同じ値を異なる長さでメモリから読み取ることができるという特性があります。

これは素晴らしい機能のように思えますが、それでも多くのシステムがビッグ エンディアンを使用しています。これはおそらく、ビッグ エンディアンにもいくつかの利点があることを意味します (もしそうなら、どれが?)。

おそらく、ハードウェア レベルまで掘り下げる必要があります。詳細を知りたいです。

4

2 に答える 2

41

この質問の詳細についてネットで少し調べてみましたが、ビッグエンディアンまたはリトルエンディアンの順序が望ましい理由を説明するためのさまざまな回答と理由があります。ここで見つけたものを説明するために最善を尽くします。

リトルエンディアン

リトルエンディアンの明らかな利点は、質問ですでに述べたことです...特定の数値を、同じメモリアドレスからさまざまなビット数として読み取ることができるという事実です。このトピックに関するウィキペディアの記事には、次のように記載されています。

このリトル エンディアン プロパティが高レベル プログラマーによって直接使用されることはめったにありませんが、コード オプティマイザーやアセンブリ言語プログラマーによってよく使用されます。

このため、バイトの重要度は常にメモリアドレスに対応するため、複数の精度を含む数学関数は簡単に記述できますが、ビッグエンディアンの数値ではそうではありません。これは、何度も引用されているリトルエンディアンの議論のようです...その普及のために、この順序付けの利点は比較的重要であると想定する必要があります。

私が見つけたもう 1 つの興味深い説明は、足し算と引き算に関するものです。マルチバイト数を加算または減算する場合、最下位バイトを最初にフェッチして、上位バイトへのキャリーオーバーがあるかどうかを確認する必要があります。最下位バイトがリトルエンディアン番号で最初に読み取られるため、システムは並列化して、次のバイトをフェッチしながらこのバイトの計算を開始できます。

ビッグエンディアン

ウィキペディアの記事に戻ると、ビッグ エンディアン数の利点は、最上位桁が最初に来るため、数値のサイズをより簡単に推定できることです。この事実に関連して、最下位バイトのオフセット 0 のビットを調べるだけで、数値が正か負かを簡単に判断できます。

ビッグエンディアンの利点について議論する際に述べられていることは、ほとんどの人が 10 進数を注文するのと同じように 2 進数が注文されるということです。これは、2 進数から 10 進数への変換時にパフォーマンス面で有利です。


これらの議論はすべて興味深いものですが (少なくとも私はそう思います)、最新のプロセッサに適用できるかどうかは別の問題です。特に、加算/減算引数は 8 ビット システムで最も有効でした...

私の考えでは、リトルエンディアンは最も理にかなっており、それを使用するすべてのデバイスを見ると最も一般的です。ビッグエンディアンが依然として使用されている理由は、パフォーマンスよりもレガシーの理由によるものだと思います。おそらく、特定のアーキテクチャの設計者が、リトル エンディアンよりもビッグ エンディアンの方が望ましいと判断し、アーキテクチャが何年にもわたって進化しても、エンディアンは同じままであると判断した可能性があります。

ここで描いた類似点は、JPEG (ビッグエンディアン) を使用したものです。JPEG を使用するほぼすべてのマシンがリトル エンディアンであるにもかかわらず、JPEG はビッグ エンディアン形式です。JPEG がビッグ エンディアンであることのメリットは何かを尋ねることはできますが、あえて言えば、すべての意図と目的において、上記のパフォーマンスの議論はわずかな違いも生じません。実際のところ、JPEG はそのように設計されており、それが使用されている限り、そのまま使用されます。

于 2012-12-21T14:24:37.137 に答える