雑記

ysd@KLab > PowerPC > その他

データアライン

データは全てサイズ分のアラインが揃っていた方がいい。こんな風に。

C/C++言語での型サイズ(byte)アライン
(unsigned/signed)char 11
(unsigned/signed)short 22
(unsigned/signed)long 44
(unsigned/signed)int 44
bool 44
(unsigned/signed)long long88
float 44
double 88

ところで、構造体を作成する時、コンパイラはアラインを満たすようにデータを配置するので、例えば

struct Hoge{
  int a;
  short b;
  double c;
  char d;
};
struct Hoge{
  int a;
  short b;
  char d;
  double c;
};
とを比べると、前者のデータ並びは、
データ名先頭byteサイズ(byte)
int a 0 4
short b 4 2
(なし) 6 2
double c8 8
char d 16 1
となり、構造体の合計サイズは17バイトとなる。後者は、
データ名先頭byteサイズ(byte)
int a 04
short b 42
char d 61
(なし) 71
double c88
となり、構造体の合計サイズは16バイトとなる…そう、char dをdouble cの前に持ってきただけで、構造体のサイズが変わってしまったのだ。構造体の中でデータのアラインを揃えるためには、データとして使われない空きの領域を作るしかない。その領域は全く使われない領域になってしまうので無駄である。なるべく空きの領域ができないようにデータを並べることで、構造体のサイズを少しだけ小さくすることができる。

ただ、それによって構造体のデータ構造が見にくくなるようなら、やらない方がいいのだが…