我们之前了解过浮点数,整数在计算机的存储方式,结构体他也有他的一套存储方式。
#includeusing namespace std; struct test { char a; int b; char c; }; int main() { cout << sizeof(test) << endl; }
sizeof出来是多少呢?这还不简单 1 + 4 + 1 = 6!那结果会是这样吗?
答案真的是让我们大跌眼镜,那这样我把 b , c换一下位置会怎么样呢
答案又变成8了,为啥会出现这样的现象呢?
结构体的大小不能,进行简单的元素的大小相加,结构体的内存布局,要考虑内存对齐。
如何内存对齐呢?
- 第一个成员在结构体变量偏移量为0的地址处。
- 其他成员变量除了第一个之外,要对齐(起始偏移量要能整除该成员的对齐数)到某个数字(对齐数 ---- 不考虑编译器设置对齐数的情况下指的是自身大小)的整数倍的地址处。
- 结构体的大小必须是最大对齐数的整数倍。
那我们在看一个例子:
#includeusing namespace std; struct test { double a; char b; int c; char e; }; int main() { cout << sizeof(test) << endl; }
证明我们的分析正确



