[プログラミング] bit-fieldの配置

86系で動作する限りはエンディアンが同じなので、バイトオーダーについては悩まない。
ただし、ビットフィールドの順序はコンパイラによるので注意が必要。
Microsoft Cのbitfieldの実装について(英語)
http://support.microsoft.com/kb/60252/en-us?fr=1
このあたりのドキュメントはマイクロソフトの機械翻訳がお茶目な日本語を生成するので英語 で読んだほうが分かりやすい。
ビットフィールドのメモリ上のレイアウトは、コンパイラの実装でどうやってもいいことにANSI C上ではなっていたと思う。
bitfieldの最初(上)から順にLSB側から置いていく、というコンパイラの動きはLinuxやFreeBSDのgccでも同じなので、この部分に違いはない。

struct
{
field-a:2:
field-b:2;
field-c:2;
};

と宣言されている型をメモリ上にレイアウトするとき、Visual Studio, gccのどちらでも、LSB側からfield-a,b,cと置かれる、ということ。

広告
%d人のブロガーが「いいね」をつけました。