zoukankan      html  css  js  c++  java
  • 数据对齐

    1. 基本类型

      计算机系统对基本数据类型的合法地址做出一些限制,要求地址必须是某个值的倍数,这样的限制简化了处理器和存储器之间的接口设计。

      首先对于char类型,只占一个字节,因此对char类型的地址没有限制;

        在Linux系统中,short类型的地址必须是2的倍数(地址最低位必须是0),其他类型的地址必须是4的倍数(地址最低两位必须是00);

      在Windows系统中,要求比较严格,K字节类型数据的地址必须是K的倍数,例如:short类型地址是2的倍数,int类型地址是4的倍数,double类型和long long类型地址是8的倍数;

    2. 结构体

      对于由基本数据类型组成的结构体而言,每个成员的地址都要满足对齐限制;整个结构体的大小必须是最大类型成员所占空间的倍数,结构体自身的地址则必须是结构体大小的倍数。例如:

    struct
    {
    int n;
    char c;
    double d;
    }

      n的地址必须是4的倍数,d的地址必须是8的倍数,为了满足这些限制,则结构体各成员的偏移情况如下:

    0          4    5       8                      16

    n          | c | 填充  |d                       

     

    其中,为了保证d的地址对齐,c后面又填充了3个字节。整个结构体的大小是8的倍数,而结构体的地址则必须是16的倍数。

     

     

    参考资料 《深入理解计算机系统》

  • 相关阅读:
    2016第13周四
    2016第13周周三
    2016第13周二
    2016第13周一
    2016第12周日
    2016第11周五
    2016第11周四
    前端的自我成长
    Java单例模式和volatile关键字
    大约 Apple Metal API 一些想法
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4681553.html
Copyright © 2011-2022 走看看