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)); }
  • 相关阅读:
    查询SQL的null与''
    JS不间断向上滚动代码
    JS不间断向左滚动代码
    Vcastr 3.0 flv player播放器
    网站W3C标准检测
    ASP.NET网站伪静态下使用中文URL
    Js禁止右键、禁止选中、禁止复制
    游标的使用
    触发器实例
    存储过程中新建临时表
  • 原文地址:https://www.cnblogs.com/litstrong/p/3303453.html
Copyright © 2011-2022 走看看