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