zoukankan      html  css  js  c++  java
  • 再探结构体字节对齐问题

    主要参考篇博文,总结成下面几点:

    1. 根据操作系统及编译器不同有不同的对齐方式,代码中C的大小在mac下是16,在windows下是24;

    2. 除了int a:2这种类型的变量,其他变量存放的起始位置都是该变量的整数倍,包括该结构题的初始化内存地址;

    3. 由于上面这条规则,因此struct的大小是内部最大变量的整数倍;

    4. struct的嵌套可能被编译器优化成在一个struct中的情况;

    5. C和D的大小不一样,所以当int a:2以及int b:2这种相同类型的放在一起,可能直接被编译器优化成了int _a_b:4。

    #include <cstdio>
    
    struct B {
        char a[3];
    };
    
    struct A {
    /*
        int a;
        //int b:20;
        //int c:5; 
        double d;
        */
        B e;
        char b;
    };
    
    struct C {
        int i:8;
        char j:4;
        int a:4;
        double b;
    };

    struct D {
      int i:8;
      int a:4;
      char j:4;
      double b;
    };
    int main() { /* A *a = new A(); unsigned long int add = (unsigned long int)a; int size = (int)sizeof(A); if (add % size == 0) { printf("yes "); } else { printf("no "); } */ // printf("%d %d ", (int)sizeof(A), (int)sizeof(B)); printf("%d ", (int)sizeof(C)); }
  • 相关阅读:
    thingsboard学习笔记
    Java8 Lambda表达式之循环使用
    LocalDateTime使用记录
    mqtt之wss功能
    OpenSSL证书合成
    Apache Commons IO使用
    visio A3设计图如何在A4纸上打印
    MSDE数据库附加
    电脑C盘application data拒绝访问的解决方法
    64位WIN7+oracle11g+plsql安装
  • 原文地址:https://www.cnblogs.com/litstrong/p/3303453.html
Copyright © 2011-2022 走看看