_Alignof:
_Alignof给出指定数据类型内存对齐的字节数,如double按8字节对齐,其内存地址都是8的整数倍。
_Alignas:
_Alignas关键字指定某个变量按照其他数据类型对齐,如char正常按1字节对齐,可指定按short类型的2字节对齐。
#include <stdio.h>
int main(void)
{
int dx;
char ca;
char cx;
//指定对齐的字节数必须大于本来的,这里必须大于4
// int _Alignas(short) dz;
int _Alignas(double) dz;
char cb;
//_Alignas要求某个变量的内存地址按指定的字节数对齐
char _Alignas(short) cz;
//_Alignof关键字给出该类型变量的内存对齐字节数,比如double按8字节对齐,即其存储地址必须是8的整数倍
printf("char alignment: %zd\n", _Alignof(char));
printf("short alignment: %zd\n", _Alignof(short));
printf("int alignment: %zd\n", _Alignof(int));
printf("double alignment: %zd\n", _Alignof(double));
printf("&dx: %p\n", &dx);
printf("&ca: %p\n", &ca);
printf("&cx: %p\n", &cx);
printf("&dz: %p\n", &dz);
printf("&cb: %p\n", &cb);
printf("&cz: %p\n", &cz);
return 0;
}
再比如:
输出结果为:
而调换结构体中元素位置后
结果为: