alignas是C++11引入的一个关键字,用于指定对象或类型的对齐方式。对齐方式指的是对象或类型在内存中的起始地址的对齐方式,对齐方式的选择可以在一定程度上提高程序的运行效率。
//下面写法程序内存对齐长度不一样,内存对齐有什么好处(增快运行速度)
struct A
{
int a;
double b;
float c;
};
对于
alignas(expression)
,表达式必须是 0 或幂为 2(1、2、4、8、16、...)的整型常量表达式。所有其他表达式的格式不正确,要么会被编译器忽略掉。可以对struct
、class
、union
或变量声明使用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 |