结构体字节对齐的例外
有一个题目,问的是以下代码的运行结果
#include <stdio.h>
#include <string.h>
struct T{
char str[11];
};
int main(int argc,char *argv[])
{
struct T s;
printf("sizeof(s) = %d\n", sizeof(s));
return 0;
}
按照以往的经验,我觉得他会按照4字节对齐,但是这个结果是11,为什么?
查阅资料才发现,当结构体中只有一个成员(这里是char数组,我测试了short数组他也不会按照4字节对齐)时,他不会按照字节对齐,这个结构体的大小就是这个数组的大小。
但是当里面有其他成员的时候情况就不一样了,这就要遵循字节对齐原则了。如下面代码所示
#include <stdio.h>
#include <string.h>
struct T{
char str[11];
int a; //加了这一行
};
int main(int argc,char *argv[])
{
struct T s;
printf("sizeof(s) = %d\n", sizeof(s));
return 0;
}
加上这一行,结果时多少呢?
这时候就需要按照字节对齐来处理,首先先11个字节的str数组会占11个字节,然后空一个字节来对齐。然后从第13个字节开始就是a这个变量。所以下面这段代码的结果是16