这个问题在这里已有答案:
我有一个类似的结构
struct Student
{
bool isActive;
};
现在,如果我看到此结构的大小输出如下:
Student student;
cout << sizeof(student);
那么它显示1,这很好,因为bool的大小是1个字节。对于
struct Student
{
string name;
};
输出为4,再次正常,因为字符串大小为4个字节。但对于以下内容:
struct Student
{
string name;
bool isActive;
};
我对sizeof(student)
的期望是4 + 1 = 5,但输出显示8.为什么会这样?
数据类型具有自然对齐,如果您指定对齐为4,则总大小为8.某些处理器需要自然对齐,并使所有体系结构上的访问速度更快。对齐通常等于结构或联合的最大成员,尽管有时候有理由重写它并使其更大(例如,与英特尔SSE指令一起使用的数据类型)。