为什么该结构存储的字节数多于其定义的字节数?
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
------------------
在有这个代码:
#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
------------------