Kesu's Blog


IT業界(一応)で働くしがないサラリーマンのブログ。
ビジネスとITに関する情報を不定期に発信しています。
(ビジネス本、自作PCやスマホ、OSSや無料な
ソフトウェア、プログラム開発など)

スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | -- trackback |  -- comment

△page top

バイトオーダー(エンディアン) 

マルチバイトなデータフィールドを用いる時、x86系プロセッサは、メモリアドレスの小さい方から値を格納します。
これを、リトルエンディアンと言います。

例えば、整数の1(0x00000001)をメモリに格納すると、

addr+0 0x01
addr+1 0x00
addr+2 0x00
addr+3 0x00

となります。

これに対して、RISC系プロセッサ(例えばSPARC)では、メモリアドレスの大きい方から値を格納します。
これをビッグエンディアンと言います。

先ほどと同じ値をメモリに格納すると、

addr+0 0x00
addr+1 0x00
addr+2 0x00
addr+3 0x01

となります。

最近はJavaよろしく、バイトオーダーなんて気にしたことない人も多いかも知れませんが、C言語などで整数型のメモリフィールドにchar型のポインタでアクセスして操作するようなプログラムを書いていると、CPU仕様の差で移植後、動作が変わる(取得される値が変わる)なんてことが起こったりします。
上の例でaddr+0にアクセスすると、x86系では0x01が返されますが、RISC系では0x00が返されるということになり、それをもって何かを判定していると、x86系ではきちんと判定出来るけれども、RISC系では判定出来なくなり、きちんと機能しなくなるなんてことになります。

テーマ: コンピュータ - ジャンル: コンピュータ

△page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。