alignof( type-id )
查询类型的对齐要求,以字节为单位
struct Storage {
char a;
int b;
double c;
long long d;
};
// struct alignas(alignof(long double)) AlignasStorage {
// struct alignas(long double) AlignasStorage {
struct alignas(std::max_align_t) AlignasStorage { // max_align_t 相当于 alignof(long double) 内存对齐为 16 字节
// 这三种写法都可以
char a;
int b;
double c;
long long d;
};
struct Empty {};
struct alignas(64) Empty64 {};
int main() {
std::cout << alignof(Storage) << std::endl; // 8
std::cout << sizeof(Storage) << std::endl; // 24 内存对齐为 8 字节,所以大小为 8 的整数倍
std::cout << alignof(AlignasStorage) << std::endl; // 16
std::cout << sizeof(AlignasStorage) << std::endl; // 32 内存对齐为 16 字节,所以大小为 16 的整数倍
int a = 10;
int &b = a;
std::cout << alignof(b) << std::endl; // 4 引用类型返回引用类型的对齐要求
int x[10];
std::cout << alignof(x) << std::endl; // 4 数组类型返回元素类型的对齐要求
std::cout << "Alignment of" "\n"
"- char : " << alignof(char) << "\n" // 1
"- pointer : " << alignof(int*) << "\n" // 8
"- int : " << alignof(int) << "\n" // 4
"- long long : " << alignof(long long) << "\n" // 8
"- empty class : " << alignof(Empty) << "\n" // 1
"- alignas(64) Empty: " << alignof(Empty64) << "\n"; // 64
return 0;
}