为什么该结构存储的字节数多于其定义的字节数?

Why the struct is storing more bytes than its definition?

在有这个代码:

#include <iostream>

using namespace std;

int main() {
    struct people {char name[50]; int tt; int gg;};
    
    struct people p1;
    cout << sizeof(p1);
    
    return 0;
}

输出是 60。为什么?我的意思是,struct 只需要有 50+4+4=58 个字节。如果我们将 name[50] 更改为 name[20],我们将得到预期的输出:28。

struct的成员使用的内存是连续的,这不矛盾吗?

为了提高效率(主要是执行速度),编译器会将您的 int 变量对齐在 4 字节边界上。因此,您的结构布局为:

name     - 50 bytes
padding  - 2 bytes
tt       - 4 bytes
gg       - 4 bytes
------------------
total     60 bytes
------------------