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