C++:指定结构体对齐字节

发布时间:2023年12月18日

先提一个问题:

struct AL
{
    char s;
    int a;
    double d;
};

sizeof(AL)的结果是多少??

毛病啊,对齐方式都不指定,这尼玛压根就是不想你答对啊。
那么,怎么指定对齐方式呢?
在C++中,你可以使用 alignas 关键字或者 #pragma pack 指令来指定结构体的对齐字节。

1. 使用 alignas 关键字:

alignas 是C++11引入的一个新特性,它可以用于指定类型或对象的对齐要求。以下是一个例子:
在这个例子中,AL的对齐要求被设置为16字节。

struct alignas(16) AL{
    char s;
    int a;
    double d;
};

2. 使用 #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 指令可以增加也可以减小对齐要求。

文章来源:https://blog.csdn.net/weixin_39568531/article/details/135056191
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。