c++11--内存对齐

本文解释了C++中内存对齐的要求,特别是在结构体中的字段对齐,包括C++11对显示对齐的支持,以及对齐值必须是2的幂且大于等于默认对齐值的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.内存对齐
1.1.c++里内存对齐要求指的是,对类型字段,要求字段的起始地址可被字段尺寸整除。

#include <iostream>
using namespace std;

struct /*alignas(16)*/ ColorVector{
    char r;
    double g;
    double b;
    double a;
};

int main(){
    cout << "alignof(ColorVector): " << alignof(ColorVector) << "  " << alignof(ColorVector::r) << "  "
        << alignof(ColorVector::g) << endl;
    return 1;
}

在这里插入图片描述

上述类型内字段存在对齐要求,相应的类型整体起始地址也需要满足对齐要求,才能使得类型内各个字段满足对齐要求。
1.2.c++11支持显示对齐,设置对齐

#include <iostream>
using namespace std;

struct alignas(16) ColorVector{
    char r;
    double g;
    double b;
    double a;
};

int main(){
    cout << "alignof(ColorVector): " << alignof(ColorVector) << "  " << alignof(ColorVector::r) << "  "
        << alignof(ColorVector::g) << endl;
    return 1;
}

在这里插入图片描述
注意点:
(1). 设置的对齐值需是2的次方。
(2). 设置的对齐值必须大于等于默认对齐值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值