美文网首页C/C++编程技巧
C++:alignas关键字的作用

C++:alignas关键字的作用

作者: AI秘籍 | 来源:发表于2020-02-26 20:46 被阅读0次
    image.png

    0.绪

    alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。

    1.代码

    #include <iostream>
    using namespace std;
     
    struct  struct_Test1
    {
        char c;
        int  i;
        double d;
    };
     
    struct alignas(8) struct_Test2
    {
        char c;
        int  i;
        double d;
    };
     
    struct alignas(16) struct_Test3
    {
        char c;
        int  i;
        double d;
    };
     
    struct alignas(32) struct_Test4
    {
        char c;
        int  i;
        double d;
    };
     
    int main()
    {
        struct_Test1 test1;
        struct_Test2 test2;
        struct_Test3 test3;
        struct_Test4 test4;
     
        cout<<"char size:"<<sizeof(char)<<endl;
        cout<<"int size:"<<sizeof(int)<<endl;
        cout<<"double size:"<<sizeof(double)<<endl;
     
        cout<<"test1 size:"<<sizeof(test1)<<endl;
        cout<<"test2 size:"<<sizeof(test2)<<endl;
        cout<<"test3 size:"<<sizeof(test3)<<endl;
        cout<<"test4 size:"<<sizeof(test4)<<endl;
     
        system("pause");
     
        return 0;
    }
    
    image.png

    解释

    test1理论字节大小13:

    理论数据大小

    不用数据对齐方式test1占用16个字节,为什么?因为计算机会做字节对齐,一般都是对齐8位,如果不用alignas关键字,默认一般是8位对齐,但也有机器不是8位对齐。

    test2占用16字节,对齐方式alignas(8)

    test3占用16字节,对齐方式alignas(16)

    test4占用32字节,对齐方式alignas(32)

    计算方法就是对齐数的整数倍,比如32位对齐,实际数据大小不到32字节,但内存还是占用32字节。实际数据大于32字节小于64字节,内存占用64字节。

    这种明确规定占用字节大小后,编写代码将更具有跨平台性。

    参考:

    1.https://zouzhongliang.com/index.php/2019/07/07/c11xinzengalignasguanjianzizuoyong/

    相关文章

      网友评论

        本文标题:C++:alignas关键字的作用

        本文链接:https://www.haomeiwen.com/subject/xepwchtx.html