`
东边日出西边雨
  • 浏览: 258088 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

内存对齐

阅读更多

为什么会有内存对齐

 

        编译系统为了使程序运行的更快,将数据在内存中的存放结构制定了一定的规则,目的是使程序运行的更快,CPU取数据更方便,但同时也浪费了一定的内存空间,这就是牺牲空间来换取时间!

 

对齐的规则

 

     盒子规则 :最宽数据类型的宽度不超过4字节时,盒子宽度等于最宽数据类型宽度。

                         最宽数据类型的宽度超过4字节时,盒子宽度为4字节(32位系统下)。

                         各个数据类型按顺序存放到盒子中,盒子的体积就是占用的内存大小啦!

 

              | <---------宽---------->|

 

             + ------------------------+

  行1      | bool | ---- | ---- | ---- |

  行2     | ----------- int ----------|

  行3     | bool | ---- | ---- | ---- |

 

      4字节*3=12字节

 

看几个例子把

 

struct {
    short a1;
    short a2;
    short a3;
} A;

struct {
    long a1;
    short a2;
} B;

class C
{
private:
    bool a1;
    int a2;
    bool a3;
};

class D
{
private:
    int a2;
    bool a1;
    bool a3;
};

class E
{
public:
    int a;
    static int b;

    E();
    ~E();
};

class F
{
public:
    int a;
    char b;

    F();
    ~F();
};

class G
{
public:
    float a;
    char c;

    G();
    ~G();
};

class H
{
public:
    float a;
    int b;
    char c;

    H();
    ~H();
};

class I
{
public:
    double a;
    float b;
    int c;
    char d;

    I();
    ~I();
};
 

sizeof(A), sizeof(B), sizeof(C) ... ... 分别是多少?

答案: A   B   C   D   E   F   G   H   I

             6   8   12  8   4   8    8   12  20

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics