エンディアン
出典: フリー百科事典『ウィキペディア(Wikipedia)』
エンディアン (endian) とは、多バイトのデータ(即ち基本情報記憶単位を超えるデータ)をメモリ上に配置する方式の種類のこと。エンディアンネス (endianness)、バイトオーダ (byte order) ともいう。
目次 |
[編集] 概要
例えば16進数で 0x1234ABCD という4バイトのデータを、データの上位バイトからメモリに「12 34 AB CD」と並べる方式をビッグエンディアン (big endian)、データの下位バイトから「CD AB 34 12」と並べる方式をリトルエンディアン (little endian) という。 その他に「34 12 CD AB」あるいは「AB CD 12 34」のように並べる方式もあり、DECのPDP-11やVAXシリーズで使われていたことからPDPエンディアンなどと呼ばれるが、現在ではほとんど見られない。
ビッグエンディアンは人間にとって直観的にわかりやすいという利点があり、一方リトルエンディアンはコンピュータにとって処理しやすい(多倍長加算の起点は最下位バイトであることなど)という利点がある。
IBM系の汎用機、SunのSPARC、MotorolaのMC68000、PowerPC G5等は「ビッグエンディアン」を採用し、インテルのx86系などは「リトルエンディアン」を採用している。ARMアーキテクチャのCPU、Transmeta社のCrusoe、Hewlett-Packard社のPA-RISC、G4までのPowerPCなど、エンディアンを切り替えられるバイエンディアン (bi-endian) のものも存在する。
[編集] 互換性・移植性
エンディアンの相違は、単一あるいは同種のシステムに閉じた運用をする限りでは通常は問題にならないが、以下のような場合に問題になることがある。
- ネットワークを通してバイト単位でデータをやりとりする場合
- 異なるシステム間でバイナリファイル等を交換する場合
- 異なるシステムにプログラムを移植する場合
- 構成するプロセッサが異なるマルチプロセッサ環境で共有メモリを使用する場合
TCP/IPネットワークでは、エンディアンの異なるコンピュータ間での通信を可能とするため、パケットなどに含まれる多バイトデータはビッグエンディアンに統一することと決められている。これをネットワークバイトオーダという。
画像や音声などのバイナリファイルにおいても、互換性を確保するため、エンディアンが規定されている例が多い。
Unicodeにおいても、構成要素が多バイトとなるエンコーディング(主にUTF-16)では、エンディアンが問題となる。そのため、バイトオーダーマーク (BOM) と呼ばれる特殊なコード (0xFEFF) が予約されており、データの先頭にこれを付与することで、データを受け取る側がエンディアンを判別できるようになっている。
[編集] 語源
ビッグエンディアンとリトルエンディアンという単語は、ジョナサン・スウィフトの風刺小説『ガリヴァー旅行記』の中のエピソードに由来する。ガリバー旅行記の第1部「小人国」では、卵を丸い方(大きい方)の端から割る人々 (Big Endians) と尖った方(小さい方)の端から割る人々 (Little Endians) との対立が描かれている。
[編集] 関連項目
カテゴリ: CPU | プログラミング | コンピュータのデータ