我们之前了解过浮点数,整数在计算机的存储方式,结构体他也有他的一套存储方式。
#include<iostream>
using 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的地址处。
- 其他成员变量除了第一个之外,要对齐(起始偏移量要能整除该成员的对齐数)到某个数字(对齐数 ---- 不考虑编译器设置对齐数的情况下指的是自身大小)的整数倍的地址处。
- 结构体的大小必须是最大对齐数的整数倍。
那我们在看一个例子:
#include<iostream>
using namespace std;
struct test {
double a;
char b;
int c;
char e;
};
int main() {
cout << sizeof(test) << endl;
}
证明我们的分析正确