美文网首页
内存对齐

内存对齐

作者: RobotBerry | 来源:发表于2017-04-28 16:24 被阅读0次

    定义

    在结构或者类中,编译器为每个成员变量按照其自然边界(alignment)分配空间,各个成员变量按照它们被声明的顺序在内存中顺序存储。

    目的

    1. 便于cpu快速访问
    2. 节省存储空间

    方法

    在缺省情况下,编译器会为每一个变量或是数据单元按其自然对界条件分配空间。也可以使用#pragma pack n伪指令设置字节对齐的数字。默认是4。

    具体对齐规则:第一个成员的地址和整个结构的地址相同。后面每个成员的地址偏移量必须是n和成员的大小的最大值的整数倍。

    例子

    class A 
    {
      int i;
      char c;
      double d;
      short s;
    }
    

    int是4个字节,char是1个字节,double是8个字节,short是2个字节。默认pack数为4。根据上面的内存对齐规则,可以算出每个成员的内存偏移量:

    • int i:第一个成员,偏移量是0;
    • char c:必须是max(4, 1) = 4的整数倍。前面成员的尾地址为4,所以偏移量为4;
    • double d:必须是max(4, 8) = 8的整数倍。前面成员的尾地址为5,所以偏移量为8;
    • short s:必须是max(4, 2) = 4的整数倍。前面成员的尾地址为16,所以偏移量为16。

    内存分布情况如下:

    int i char c double d short s
    0-4 4-5 8-16 16-18

    相关文章

      网友评论

          本文标题:内存对齐

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