C语言,为什么分配给2个旋转的内存(地址)不是连续的


struct stu{
    char a;
    int b;
    char c;
};
int main(){
    struct stu stu1;
    stu1.b = 12;
    struct stu stu2;
    stu2.b = 10;
    return 0;
}

每个元素的地址如下所示:

&stu1
0x7fffffffe000
&stu1.a
0x7fffffffe000
&stu1.b
0x7fffffffe004
&stu1.c
0x7fffffffe008
&stu2
0x7fffffffe010
&stu2.a
0x7fffffffe010
&stu2.b
0x7fffffffe014
&stu2.c
0x7fffffffe018

为什么在2个结构之间有4个字节(0x7fffffffe0c〜0x7fffffffe00f)

ps:另外,如果仅定义了两个结构,则它们的地址相同,为什么?

这是出于速度原因。读/写整个(d)(q)单词(与实际的物理内存结构对齐)要快得多。您还可以看到单个字符需要4个字节(b -addr。的a = 4,而不是1)。

如果要避免它,请制作一个结构并使用#pragma Pack。

正确的数据分组可以使您的程序更快(因为大多数读/写操作都使用整个QWOWS完成)。

最新更新