c++11--内存对齐

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

#include 
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 
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). 设置的对齐值必须大于等于默认对齐值。

你可能感兴趣的:(1.3.语言-C++11,内存对齐)