zoukankan      html  css  js  c++  java
  • 结构体、类的成员对齐

    自然对齐

    为了保证CPU的运算稳定和效率,要求基本数据类型在内存中的存储地址必须自然对齐。所谓自然对齐,就是基本数据类型的变量不能简单的存储于内存中的任意地址处,它们的起始地址必须能够被它们的大小整除。

         例如,在32位平台下,int和指针类型的变量的地址应该能够被4整除。

    结构体变量的自然对齐

    对于复合类型(一般指结构体和类)的对象,如果它的起始地址能够满足其中要求最严格(最高)的那个数据成员的自然对齐要求,那么它就是自然对齐的。

         什么是“自然对齐要求最严格”呢?距离来说吧,double、int、bool所占的空间依次为8、4、1,它们的对齐严格性依次降低。

    结构体内部成员变量的对齐方式,按照其sizeof大小最大的基本类型变量的对齐要求进行对齐。必要的时候,对象的末尾还要进行字节填充。

    总结:结构体的长度一定是其最长的成员变量大小的整数倍。

    例子

    struct{			//sizeof 8,按4字节对齐,末尾填充2字节
    	long a1;
    	short a2;
    }B;
    
    struct STest		//sizeof 16,按8字节对齐,末尾填充7字节
    {
    	double b;
    	char a;
    };
    
    struct ThreeeShort{	//sizeof 10,按2字节对齐,末尾填充1字节
    	short a;
    	short b;
    	short c;
    	short d;
    	char ch;
    };
  • 相关阅读:
    Hello,world的几种写法!
    浮动与清除浮动
    css中表格的table-layout属性特殊用法
    CSS之照片集效果
    CSS之transition过渡练习
    CSS之过渡简单应用—日落西山
    CSS之立方体绘画步骤
    CSS之立体球体
    transform
    Vue.sync修饰符与this.$emit('update:xxx', newXXX)
  • 原文地址:https://www.cnblogs.com/younes/p/1750265.html
Copyright © 2011-2022 走看看