一、什么是结构体内存对齐
是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。
通过这种方法可以使得机器访问效率加快,也可以使得平台一致性变高。
二、结构体对齐的规则
有两组代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
struct A
{
char a;
int b;
char c;
};
struct B
{
char a;
char b;
int c;
};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
return 0;
}
由此我们可以猜测是结构体的内存对齐发挥了作用。
结构体内存对齐的规则:
1.对于每个成员变量找出它们的对齐数:
从成员中找出一个占字节数最大的,再与默认对齐数进行比较,这两个数中去一个较小值。
2.再找到一个最大对齐数:
这个最大对齐数(默认对齐数 与 所有成员变量类型最大的,两数中去一个较小值)是用来确定最后的结构体的大小,完成第一步,将所有成员变量存储在该区的地方以后,需要再根据这个数来确定结构体的总大小。(给这个数乘整数,让所有成员能够放得下)
示例:
三、补充
1.改变结构体默认内存数的方法:
#pragma pack() //恢复默认对齐数
#pragma pack(x) //x是想修改的默认对齐数