C++中类的大小计算方法总结
来源:互联网 发布:淘宝可以apple pay吗 编辑:程序博客网 时间:2024/05/16 11:30
1、空类的大小为1字节
2、字节对齐的问题
如下例:
一个类的大小可以被下面的方式改变:
class
{
bool
int
bool
};
这个结果可能会让你吃惊,因为A的成员总数是6个字节:1+4+1个字节。那另6字节是哪儿来的?编译器在每个bool成员后面都插入了3个填充字节以保证每个成员都是按4字节排列,以便分界。你可以减少A的大小,通过以下方式:
class
{
bool
bool
int
};
这一次,编译器只在成员c后插入了2个字节。因为b占了4个字节,所以就很自然地把它当作一个字的形式排列,而a和c的大小1+1=2,再加上2个字节就刚好按两个字的形式排列B。
3、虚函数:如果有虚函数,类的大小+4个字节。(用来存放vptr)
例:
class A
{
virtual void foo();
int i;
char c;
}; sizeof(A) = 12 = vptr + sizeof(i) + (sizeof(c) +3);
class B :public A
{
void foo1();
static int haha;
long ll;
} sizeof(B) = 16 = sizeof(A) + sizeof(ll);
4、虚基类指针:如果是虚继承,则子类的大小为:虚基类的大小 + 4个字节(用来存放指向虚基对象的指针)+子类新增成员的大小。
{
};
class
{
}
4、虚基类指针:如果是虚继承,则子类的大小为:虚基类的大小 + 4个字节(用来存放指向虚基对象的指针)+子类新增成员的大小。
例:
class A
{
virtual void foo(){};
int i;
int j;
};
{
};
class C: virtual public A
{
char sz[10];
};sizeof(C) = sizeof(A) + 4 + sizeof(sz[10]) = 12+4+10+2(补齐sz)=28
{
};sizeof(C)
0 0
- C++中类的大小计算方法总结
- [C/C++]结构体大小的计算方法
- 声音文件大小的计算方法
- Direct3D中常用的数学计算方法总结
- 在C中来计算方法的使用时间
- 结构体大小的计算方法
- 类的大小 (sizeof(类对象))的计算方法
- C++中类的大小
- C/C++中结构体占用内存大小的计算方法
- C语言结构体,联合体,枚举体的内存大小计算方法
- struct和union大小的计算方法
- 【hadoop】 4004-Hadoop-2.4.1 版本中map任务待处理split大小的计算方法
- Hadoop新版本中map任务待处理split大小的计算方法
- 大数阶乘的计算方法(c++)
- c语言字符串的计算方法
- Mahout中相似度距离计算方法总结
- MDX中常见的计算方法
- 组织机构中校验码的计算方法
- 配天机器人:以技术创新为导向的企业发展之路
- Ubuntu下配置PYTHON工作环境
- 安装mysql环境命令
- 操作给定的二叉树,将其变换为源二叉树的镜像。
- 优化MySQL数据库的方法
- C++中类的大小计算方法总结
- Spring定时任务的几种实现
- js 字符串中是否存在
- CSS3的rgba、opacity和filter的区别和详解
- 事务中savepoint的使用
- 网上商城——总结
- 【a601】雇佣计划
- eclipse 提交代码到svn 过滤文件
- uva 10862 Connect the Cable Wires