<二>C++对象模型基础

• C++对象内存布局
• 按照实例数据成员声明顺序从上到下排列(与C语言保持兼容)
虚函数指针占用一个指针size
静态数据成员不参与
• 内存对齐与填充——

• 对象内存对齐是为了优化CPU存储数据效率、避免数据截断
• 按对齐系数(4字节、8字节)整倍数
• 可使用#pragma pack(4)控制
• 简单优化:长字段放前,短字段置后(聚集)

• 对象有多大?sizeof

class C1
{
    int i;    //4 byte  
    char c1;  //1 byte
    char c2;  //1 byte
}; // 8字节 内存


class C2
{
    char c1;  //4
    int i;    //4
    char c2;  //4
};//12 byte 内存填充 padding

class C3
{
    int i1; //4
    char c1; //4
    int i2;  //4
    char c2; //4
    int i3;//4
    char c3;//4
    int i4;//4
    char c4; //4 
    
};//32

class C4
{
    int i1; //4byte 
    int i2; 
    int i3;
    int i4;
    
    char c1;
    char c2; 
    char c3;
    char c4; 
};//  4* 4 + 4


int main()
{
  cout<<sizeof(C1)<<endl;// 输出8
  cout<<sizeof(C2)<<endl;// 输出12
  cout<<sizeof(C3)<<endl;// 输出32
  cout<<sizeof(C4)<<endl;// 输出20


}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值