如何计算结构中不同数据类型的偏移量?

How to count the offset of different data type in struct?

我知道不同的数据类型会对齐。但是我想不通为什么这个结构体的大小是12

#include <stdio.h>

struct ABC {
    char a; 
    char b; 
    int k;  
    char c; 
};

int main()
{
    struct ABC a;
    printf("%lu\n", sizeof(a)); //12
    return 0;
}

好的,它是这样工作的

规则如下:

chars 对齐到 1 个字节

ints 对齐到 4 个字节

整个结构必须与最大元素的倍数对齐。

最终结构将是

struct ABC
{
    char a; // Byte 0
    char b; // Byte 1
    char padding0[2]; // to align the int to 4 bytes
    int k;  // Byte 4
    char c; // Byte 8
    char padding1[3]; // align the structure to the multiple of largest element.
    // largest element is int with 4 bytes, the closest multiple is 12, so pad 3 bytes more.
}