Skip to content

alignas

stackoverflow Memory alignment : how to use alignof / alignas?

cppreference alignas specifier (since C++11)

// the array "cacheline" will be aligned to 128-byte boundary
alignas(128) char cacheline[128];

NOTE:

"tag-align-to-cache line-optimization-alignas"

zhihu C++11中的alignas能否完全代替#pragma pack?

Weyne Chen的回答 - 知乎

这段话中重要的一句就是,不能指定比本身还小的对齐。比如下面的代码

#include <bits/stdc++.h>
using namespace std;
struct alignas(1) Point
{
    int a;
    char b;
} p;

#pragma pack(push)
#pragma pack(1)
struct Point2
{
    int a;
    char b;
} p2;
#pragma pop(pop)

int main()
{
    cout << alignof (p) << endl;
    cout << sizeof(p) << endl;

    cout << alignof (p2) << endl;
    cout << sizeof(p2) << endl;
}
// g++ test.cpp --std=c++11 -pedantic -Wall -Wextra

输出如下:

4
8
1
5

海鹏的回答

1、不能

2、有的平台不支持未对齐内存访问,alignas的目的是允许你往更大的字节数去对齐,比如char对齐到32位供SIMD load