zoukankan      html  css  js  c++  java
  • 结构体-内存对齐

     struct A{
       char c1;
       int i;
       short s;
       int j;
    }a;

    sizeof(a)的值是16。

    分析:char  c1占用1个字节

       int  i占用4个字节,c1不是i的整数倍,所以c1对齐为4个字节

         (c1 + i)占用8个字节

       short  s占用2个字节

            (c1 + i) 是s的整数倍,所以i不用对齐

            (c1+ i + s)占用10个字节

            int  j占用4个字节,(c1 + i + s)不是j的整数倍,所以s对齐为4个字节

            (c1 + i + s + j)占用16个字节,是占用字节最大的成员变量类型(int)所占字节数的整数倍,所以j不用对齐,所以sizeif(a)的值是16。

    struct B{
       int i;
       int j;  
       short s;
       char c1;
    }b;

    sizeof(b)的值是12。

    分析:

      int  i占用4个字节,int  j占用4个字节,i是j的整数倍,所以i不用对齐

      (i+j)占用8个字节,short  s占用2个字节,(i+j)是s的整数倍,所以j不用对齐

          (i+j+s)占用10个字节,char  c1占用1个字节,(i+j+s)是c1的整数倍,所以s不用对齐

      (i+j+s+c1)占用11个字节,不是占用字节最大的成员变量类型(int)所占字节数的整数倍,所以c1要对齐为2个字节

      所以sizeof(b)的值为12。

    对齐方法总结:

    1、前面的成员变量所占字节总数要是下一个成员变量所占字节数的整倍数。

       否则,前面的成员变量中的最后一个成员变量需要对齐,使前面的成员变量所占字节总数是下一个成员变量所占字节数的最小整数倍。

    2、所有成员变量所占字节总数要是占用字节数最大的成员变量的整倍数。

       否则,最后一个成员变量需要对齐,使所有成员变量所占字节总数要是占用字节数最大的成员变量的最小整倍数。

      

  • 相关阅读:
    WPF动态加载3D 放大-旋转-平移
    WPF窗口继承实现统一风格的自定义窗口
    桌面程序的其他实现方式----使用WPF窗体展现网页
    WPF 中自定义控件及其使用
    flask系列三之Jinja2模板
    Python模块学习
    利用Flask-SQLAlchemy提供的paginate()方法实现博客文章的分页显示
    Python利用flask sqlalchemy实现分页效果
    sqlalchemy和flask-sqlalchemy几种分页操作
    Python SQLAlchemy ORM示例
  • 原文地址:https://www.cnblogs.com/panda1024/p/5569639.html
Copyright © 2011-2022 走看看