C语言中的_Alignas和_Alignof

_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;
}

再比如:

输出结果为:

而调换结构体中元素位置后

结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值