C++ 基础 alignas alignof

文章介绍了C++11中引入的alignas关键字,用于控制对象或类型在内存中的对齐方式,以提升程序运行效率。讨论了alignas的语法、使用场景,以及模版和类的对齐示例。
摘要由CSDN通过智能技术生成

alignas是C++11引入的一个关键字,用于指定对象或类型的对齐方式。对齐方式指的是对象或类型在内存中的起始地址的对齐方式,对齐方式的选择可以在一定程度上提高程序的运行效率。

//下面写法程序内存对齐长度不一样,内存对齐有什么好处(增快运行速度)
struct A
{
    int a;
    double b;
    float c;
};

对于 alignas(expression),表达式必须是 0 或幂为 2(1、2、4、8、16、...)的整型常量表达式。所有其他表达式的格式不正确,要么会被编译器忽略掉。可以对 structclassunion 或变量声明使用 alignas 说明符

struct alignas(8) S1
{
    int x;
};

//默认的对齐方式是4个字节,实例在内存中的地址应该是8字节的倍数
//模版对齐方式
template <typename... Ts>
class alignas(Ts...) C2
{
    char c;
};

static_assert(alignof(C2<>) == 1, "alignof(C2<>) should be 1");
static_assert(alignof(C2<short, int>) == 4, "alignof(C2<short, int>) should be 4");
static_assert(alignof(C2<int, float, double>) == 8, "alignof(C2<int, float, double>) should be 8");
//类对齐
class alignas(32) C3 {};

int main()
{
    //变量对齐
    alignas(2) int x; // ill-formed because the natural alignment of int is 4
}

alignof运算符将指定类型的对齐方式(以字节为单位)作为类型 size_t 的值返回。

alignof( char )1
alignof( short )2
alignof( int )4
alignof( long long )8
alignof( float )4
alignof( double )8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路奇怪

有钱出钱,没钱多出编程主意啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值