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、所有成员变量所占字节总数要是占用字节数最大的成员变量的整倍数。

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

      

  • 相关阅读:
    三阶魔方公式
    XML解析GData、XMLParser
    xib_cell布局适配高度
    SizeClass
    Storyboard界面传值
    Masonry(第三方库)的使—代码实现屏幕适配
    UITableView
    AFNetworking网上加载数据及JSON解析
    UICollectionView
    OC面向对象-多态
  • 原文地址:https://www.cnblogs.com/panda1024/p/5569639.html
Copyright © 2011-2022 走看看