具有填充的结构的大小

Laa*_*vaa 3 c struct memory-management structure

我有以下结构.在侧面计算尺寸的地方.填充后结构的大小应为30Bytes.但是大小是28.结构尺寸28如何?

#include <stdio.h>
struct a
{
    char t;      //1 byte+7 padding byte      Total = 8bytes
    double d;    //8 bytes                    Total = 16bytes
    short s;     //2 bytes                    Total = 18Bytes
    char arr[12];//12 bytes 8+8+4+12=32.      Total = 30Bytes
};
int main(void)
{
    printf("%d",sizeof(struct a));  // O/p = 28bytes
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 5

您可以offsetof用来知道每个结构成员后的实际填充:

#include <stddef.h>

printf("Padding after t: %zu\n", 
    offsetof(struct a, d) - sizeof (((struct a *) 0)->t));

printf("Padding after d: %zu\n",
    offsetof(struct a, s) - offsetof(struct a, d)
    - sizeof (((struct a *) 0)->d));

printf("Padding after s: %zu\n",
    offsetof(struct a, arr) - offsetof(struct a, s)
    - sizeof (((struct a *) 0)->s));

printf("Padding after arr: %zu\n",
      sizeof(struct a) - offsetof(struct a, arr)
      - sizeof (((struct a *) 0)->arr));
Run Code Online (Sandbox Code Playgroud)

正如R.所写,你可能在一个32-bit系统,其中对齐double是4个字节而不是8个字节.