class struct 内存对齐

class struct 内存对齐


原则:
1、每个成员相对于这个结构体变量地址的偏移量正好是该成员类型所占字节的整数倍
2、struct最终占用字节数为成员类型中最大占用字节数的整数倍

struct内存对齐

Demo1:占用17字节,由于必须是8的整数倍,所以实际占用24字节

struct Stu
{
    int id;									// 占用0~3
    double d;								// 占用8~15
    char c;							// 占用16
};

Demo2:占用16字节,是8的整数倍,实际占用16字节

struct vpoet
{
    char c;			// 占用0
    int id;			// 占用4~7
    double d;		// 占用8~15
};

总结:struct占用内存与元素顺序有关,建议按单个元素占用空间大小合理排序

class内存对齐

Demo1:空类占用1字节

class Empty
{
}

Demo2:虚函数占用一个指针的空间(参考博主:多继承和虚继承 & 虚函数),以下占用12字节(参考struct内存对齐机制)

class CBase
{
public:
    CBase(void);
    virtual ~CBase(void);
private:
    int   a;
    char *p;
};

Demo3:子类大小等于父类大小+子类成员大小(16字节)

class CChild : public CBase
{
public:
    CChild(void);
    ~CChild(void);
private:
    int b;
};

Demo4:静态数据成员被编译器放在程序的一个global data members中,它是类的一个数据成员.但是它不影响类的大小(8字节)

class A
{
  int a;
  static int b;
  virtual void FuncA();
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值