先提一个问题:
struct AL
{
char s;
int a;
double d;
};
sizeof(AL)
的结果是多少??
毛病啊,对齐方式都不指定,这尼玛压根就是不想你答对啊。
那么,怎么指定对齐方式呢?
在C++中,你可以使用 alignas
关键字或者 #pragma pack
指令来指定结构体的对齐字节。
alignas
关键字:alignas
是C++11引入的一个新特性,它可以用于指定类型或对象的对齐要求。以下是一个例子:
在这个例子中,AL的对齐要求被设置为16字节。
struct alignas(16) AL{
char s;
int a;
double d;
};
#pragma pack
指令:#pragma pack
是一个编译器指令,它可以用于控制结构体的对齐方式。以下是一个例子:
在这个例子中,AL的对齐要求被设置为1字节。#pragma pack(push, 1)
指令将当前的对齐设置压入栈,并设置新的对齐设置。#pragma pack(pop)
指令将对齐设置恢复为栈顶的设置。
#pragma pack(push,1)
struct AL
{
char s;
int a;
double d;
};
#pragma pack(pop)
注意,alignas
关键字和 #pragma pack
指令的效果是不同的。
alignas
关键字只能增加对齐要求,而不能减小对齐要求。
而 #pragma pack
指令可以增加也可以减小对齐要求。