内存对齐规则

#include "stdafx.h"
#include <iostream>
using namespace std;


class B
{
public:
	double m_a;
	char m_b;
	short m_c;
	int m_d;
	char m_e;
	int m_f;
};

class C
{
public:
	char m_a;
	char m_b;
	int m_c;
	short m_d;
};

int main()
{
	B b;
	cout << &b.m_a << endl;
	cout << (bool*)&b.m_b << endl;
	cout << &b.m_c << endl;
	cout << &b.m_d << endl;
	cout << (bool*)&b.m_e << endl;
	cout << &b.m_f << endl;
	cout << sizeof(B) << endl;

	C c;
	cout << (bool*)&c.m_a << endl;
	cout << (bool*)&c.m_b << endl;
	cout << &c.m_c << endl;
	cout << &c.m_d << endl;
	cout << sizeof(C) << endl;

    return 0;
}

//用B作为例子,说明对齐规则:
//(1)B中最大的类型为double, 大小为8字节.(以类中最大类型大小作为块的分配单位)
//(2)分配第一块8字节,分给m_a.刚好放下m_a变量。
//(3)分配第二块8字节,首先放入m_b, 只使用了1字节.然后放入m_c,占用2个字节。(类型变动)此时将m_b和m_c看成一个类,那么就要以m_c的类型short作为基本分配单位,
//那么此时m_b就要占用2个字节,第一个字节放入真实的内容,第二个字节作为占位(无内容), m_c 占用2字节。所以这里一共占用了4byte.接下来放入m_d, m_d为
//int类型,占用4字节。此时刚好填满了8byte, 于是这块8byte内存使用完毕
//(4)分配第三块8字节,放入m_e, m_e占用1字节,然后放入m_f,占用4个字节。(类型变动)此时将m_e和m_f 看成一个类,那么就要以m_f的类型int做为基本的分配单位,
//那么此时m_e就要占用4个字节,第一个字节放入真实的内容,剩余3个字节作为占位(无内容),m_f占用8字节中的剩余4字节.

//基本规则:
//(1)找到类中变量类型最大的类型。以此作为块分配单位。
//(2)尽量填满每块的内容。
//(3)类型发生变化的时候,要特别注意。


输出:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值