内存对齐

2019-12-26  本文已影响0人  otc1

内存对齐

什么叫内存对齐
内存对齐就是按照特定的规则对数据进行存储,一般编译器按照8字节对齐标准处理。
内存对齐一般用在结构体上,类本质上也是结构体。

内存对齐的规则
1,每个结构体的起始位置为0,结构体内的每个元素的起始地址为自己长度的整数倍(如:int 4字节,起始位置为4的整数倍)

struct charStr{
    char b;    //1   起始0,长度1
    short a;    //2  起始2,长度2
}charStr;  //sizeof = 4

2,如果结构体里面有结构体,那么内部结构体的起始地址为该内部结构体最大元素的整数倍

struct charStr2{
    char a;   //起始0,长度1
    int b;   // 起始4,长度4
    int c;  // 起始8,长度4
}charStr2;  //sizeof = 12;

struct charStr3{

    char a1;            //起始0,长度1
    struct charStr2 a; //起始4,长度12
    struct charStr2 b; //起始16,长度12

}charStr3; //sizeof = 28

3,整个结构体的大小要为自己最大元素的整数倍
如上图,本来是27,强行加成28了。

为什么要内存对齐
因为计算机一次读取的数据看数据总线位数,32或者64位。不对齐会导致读取某一个数据需要cpu进行2次读取操作。如第一个结构体,如果是个结构体数组,不对齐,那么,在64位下,第三个结构体就需要读取2次,才能拿到short类型的值。

上一篇 下一篇

猜你喜欢

热点阅读