为什么结构填充没有正常发生?

Why structure padding is not happening properly?

#include<stdio.h>

struct A
{
    char        c;
    double      e;
    int         s;
}A;

int main()
{
    printf("%u\n", sizeof(A));
    return 0;
}

它正在给出输出 16。把structure internal padding和structure padding作为一个整体来考虑,不应该是24吗?

我正在使用 GCC 4.8.2.

Ubuntu 14.04 32 位 上编译代码

您的计算假定 double 需要 8 字节对齐。并非所有架构都是如此。

在带有 GCC 的 32 位 x86 Linux 上,double 默认为 4 字节对齐。您可以使用 -malign-double 标志更改它以使其 8 字节对齐。

因此布局假定默认为 32 位 x86 Linux:

char       // 1 byte
           // 3 byte padding
double     // 8 bytes
int        // 4 bytes

所以一共16个字节,中间填充了3个字节

Wikipedia 文章 Data structure alignment 在 32 位 x86 和 64 位 x86_64 中有 size/alignment 个不同类型的数字 compilers/environments。