MW211 EXIT

devlog
C言語/続・アライメントサイズの確認
2012年11月08日
┌──────────────────────────────────────┐
│struct {                                                                    │
│    char  a;                                                                │
│    int   b;                                                                │
│} z;                                                                        │
│printf("%d", sizeof(z));  →8(1+空3+4)                                    │
└──────────────────────────────────────┘
のように、int型の直前にアライメント端数があると、空き地を設けてくれるわけだが
┌──────────────────────────────────────┐
│struct {                                                                    │
│    int   b;                                                                │
│    char  a;                                                                │
│} z;                                                                        │
│printf("%d", sizeof(z));  →8(4+1+空3)                                    │
└──────────────────────────────────────┘
実は、構造体の末尾でも同じことがいえる。

つまり、構造体のサイズはアライメントの倍数であることが保証されるわけだ。

よって、以下の数式で構造体配列の配列数を正しく求めることもできる。
┌──────────────────────────────────────┐
│配列数 = sizeof(配列) / sizeof(配列[0]);                                    │
└──────────────────────────────────────┘
分類:C/C++