バイトオーダーに関する解説[ホストOS順、ネットワークOS順、デバッガーで直接観察する]({< relref “/post/2023/01-10-ホストOS順、ネットワークOS順、デバッガーで直接観察する” >}})
コンピュータ分野で歴史的な経緯から形成されたある種の設計習慣は、おべっか粉の幅がロケット推進器の幅を決める道理と同じで、無理に「利点」「欠点」を分析する必要はなく、単なる慣習です。
元のリンク
著者:北極 リンク:https://www.zhihu.com/question/637413724/answer/3346032134 出典:知乎 著作権は著者に帰属します。商業目的での転載には、著者に許可を得てください。非商用目的での転載の場合は、出典を明記してください。
転載本文
現在のビッグエンディアン/リトルエンディアンの状況は、歴史的な慣習と商業化の結果であり、技術そのものとは大きく関係ありません。ARMは、ビッグエンディアンにもリトルエンディアンにも設定できます。TCP/IPヘッダーも現在でもビッグエンディアン(ネットワークバイトオーダー)です。ストレージ分野においても、多くのストレージプロトコル/仕様でデータは大端方式で保存されています。
ですから、質問者の3つの質問は、今日の視点から見ると:
- コンピュータがなぜ一般的にリトルエンディアンを採用しているのか?→ 誤り。
- 効率は必ずしも高くなるわけではありません。
現代の技術をもってしても、これらの問題を論証するのは、矢を放ってから的に当てるような行為だ。
しかし、ビッグエンディアンかリトルエンディアンかの選択に関して言えば、コンピュータの発展史の中で、確かに一定の客観的な要因がありました。ホスト・バイトオーダー(リトルエンディアン)の利点:リトルエンディアンの方が加算回路が作りやすいです。8ビット*4の加算器を作る場合、1つの8ビット加算器で十分で、低位から高位へ順に各バイトを足し合わせれば良いのです。キャリー回路は非常にシンプルですが、ビッグエンディアンの場合、一度に32ビットをロードする必要があり、そうしないと計算できません。現在では、一度に8ビットか32ビットかをロードする違いはそれほど大きくありませんが、数十年前のメモリ価格が高かったため、できるだけシンプルな方が良いので、ホスト・バイトオーダーのリトルエンディアンを選択したのはコストを考慮した結果です。ネットワーク・バイトオーダー(ビッグエンディアン)の利点:初期のデバイスのキャッシュは非常に小さく、上位バイトを受信することで、パケット情報を迅速に判断できました。バッファサイズ(どれくらいのキャッシュを用意する必要があるか)、アドレス範囲(IPアドレスは先頭からマッチングされる)です。初期のネットワークデバイスのキャッシュはバイト単位で動作しており、上位バイトを取得すると確かに少し速くなります。そのため、ネットワークデバイスがビッグエンディアンを使用しているのも、コストを考慮した結果です。
そのため、バイトオーダーの選択は、歴史的に見ると、主にアプリケーションのシナリオやコストを考慮したものでした(例えば、PPC/MIPSはネットワーク機器に適しているなど)。そして、その後の技術発展の中で、互換性のために、リトルエンディアン/ビッグエンディアンの設定が現在まで引き継がれています。
今日において、これらの利点は完全に消滅しており、単なる慣習となっている。