1 分析下列程序:

#include<iostream>
using namespace std;
struct s
{
int x: 3;
int y: 4;
int z: 5;
double a;
};
int main() {
cout<<sizeof(s)<<endl;
return 0;
}

  求sizeof(s)的结果为 16.

分析:看清楚结构体中是位操作,三个变量共占用一个int 类型的大小,int 类型占用4个字节,double占用8个字节,为实现内存对齐,int类型需要填充4个字节的长度。

x,y,z分别占用3,4,5位,int是4个字节32位,相当于xyz占用4个字节,double占8个字节,按照对齐原则,前面补4位,4+4+8=16.有一个条件是默认8字节对齐,如果前面加上一句#pragma pack(4)//设定为4字节对齐,结果就是12.

C结构体之位域(位段)

windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为:1、

#include<iostream>
using namespace std;
class A
{
};
int main() {
cout<<sizeof(A)<<endl;
return 0;
}

分析:C++对空类或者空结构体,对其sizeof操作时候,默认都是1个字节。如果类为空,结果是1.

#include<iostream>
using namespace std;
class A
{
char b[0];
};
int main() {
cout<<sizeof(A)<<endl;
return 0;
}

 如果在类中定义了变量,那就是变量size,char b[0]长为0,所以大小为0

类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二地址。同样空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就会有独一无二地址。所以空类的sizeof为1,而不是0.多重继承的空类大小也是1.

 

 

C++学习(13)

最新文章

  1. 开始学习C++
  2. LoadRunner录制不弹出IE浏览器,event=0
  3. C#:实现快捷键自定义设置
  4. 转载 jQuery的三种$()
  5. elasticsearch 八、重要的配置更改
  6. 自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求
  7. C#基本知识点-Readonly和Const的区别
  8. HTML5 canvas 中的线条样式
  9. Caesar cipher
  10. 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
  11. 疯狂JAVA讲义第三章之数组篇
  12. Ubuntu中firefox设置成中文
  13. Python练手例子(13)
  14. 解析 ViewTreeObserver 源码(上)
  15. python----操作文本文件
  16. hadoop fs,hadoop dfs,hdfs dfs
  17. AngularJS checkbox/复选框 根据缓存数据实时显示
  18. jquery实现模拟select下拉框效果
  19. Verilog 加法器和减法器(5)
  20. vcenter SSO

热门文章

  1. Software Testing 3
  2. vue 在浏览器控制台怎么调试 谷歌插件vue Devtools
  3. John Deere Service Advisor EDL V2 Diagnostic Kit
  4. 时间序列数据库调研之InfluxDB
  5. linux bash tutorial
  6. [Python]基础教程(2)、PyCharm安装及中文编码
  7. JS设计模式(8)模板方法模式
  8. oracle 连接问题汇总
  9. sublime汉化
  10. linux安装nord,卸载nord源