C和C++中结构体的区别和结构体占用内存大小问题

总结一句话:c++中的结构除了默认是共有属性外,计划和类一样,而c的结构体没有

对比c的结构体c++的结构体
函数不允许有函数

允许有成员函数

1.允许有构造函数、析构函数和this指针

2.允许这个函数是虚函数

权限访问权限只能是publicC++允许public,private,protected三种
继承不允许允许

C/C++结构体占用内存大小问题!

计算struct占用的内存大小需要考虑两点:一是各个分量的偏移地址的计算,二是最终整体大小要进行地址对齐(为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节)。

struct{  
    char a[15]; //占15个字节,从0开始偏移,所以下面的int是从15开始偏移  
    int x;//偏移量 0x15+1=16  
}s1;  
cout<<sizeof(s1)<<endl; //结果为20字节  
  
struct{  
    char a[15]; //  
    int x; //偏移量 16字节  
    char b; //偏移量 21字节  
}s2; //结果为21字节,按最大基本类型对齐,补充到24字节  
cout<<sizeof(s2)<<endl; //结果为24字节  
  
struct{  
    char a[15];  
    int x;  //偏移量 16字节  
    double b; //double偏移量必须为8的倍数,故偏移量24字节  
}s3;//  
cout<<sizeof(s3)<<endl; //结果为32字节
 
struct{  
    char a[15];  
    int x;  //偏移量 16字节  
    double b; //偏移量 24字节  
    char c;//偏移量 32字节  
}s3;//共33字节,按最大基本类型对齐,补充到40字节(整除8)  
cout<<sizeof(s3)<<endl; //结果为40字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值