C++笔记 | C++ 类所占的空间大小统计方法
2018-03-19 13:02
375 查看
32位机器上,有三个类A B C定义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序.
首先是A,普通成员函数以及构造函数析构函数不归入统计范围,两个int是8个字节,因此A是8个字节,对于B,由于他继承自A,有8个字节,一个int一个char分别是4个和1个字节,static静态成员不予考虑,B一共有8+5=13个字节
对于C,由于虚函数需要维持虚函数表,需要一个指针,32位机器为4个字节,一个Int一个short为6个字节,一共为10个字节
所以应该是A<C<B
Examples:
//空类:
class CBase
{ };
空类也会被实例化,编译器会给空类隐含的添加一个字节,sizeof()的结果是1。
//这个也是空类
class Base
{
public:
Base();
~Base();
}; //1字节
class CBase
{
public:
CBase(void); //其他成员函数不归入sizeof统计
virtual ~CBase(void); //虚析构函数 virtual ~Base() 的指针占4子字节
private:
int a; //32位机器上,32 / 8 = 4 字节
char *p; // 同上 4字节
};//一共 4 + 4 + 4 = 12 字节
class Derive:public Base //Derive类首先要具有Base类的部分,也就是占12字节
{
public:
Derive():Base(){};
~Derive(){};
private:
static int st; //非实例独占 , static int st;不归入sizeof统计
int d; //占4字节
char *p; //4字节指针
}; //12 + 8 = 20 字节
另外需要注意Short是2个字节
| struct A{ A() {} ~A() {} int m1; int m2; }; struct B:A{ B() {} ~B() {} int m1; char m2; static char m3; }; struct C{ C() {} virtual~C() {} int m1; short m2; }; |
对于C,由于虚函数需要维持虚函数表,需要一个指针,32位机器为4个字节,一个Int一个short为6个字节,一共为10个字节
所以应该是A<C<B
Examples:
//空类:
class CBase
{ };
空类也会被实例化,编译器会给空类隐含的添加一个字节,sizeof()的结果是1。
//这个也是空类
class Base
{
public:
Base();
~Base();
}; //1字节
class CBase
{
public:
CBase(void); //其他成员函数不归入sizeof统计
virtual ~CBase(void); //虚析构函数 virtual ~Base() 的指针占4子字节
private:
int a; //32位机器上,32 / 8 = 4 字节
char *p; // 同上 4字节
};//一共 4 + 4 + 4 = 12 字节
class Derive:public Base //Derive类首先要具有Base类的部分,也就是占12字节
{
public:
Derive():Base(){};
~Derive(){};
private:
static int st; //非实例独占 , static int st;不归入sizeof统计
int d; //占4字节
char *p; //4字节指针
}; //12 + 8 = 20 字节
另外需要注意Short是2个字节
相关文章推荐
- C++ 类的空间大小计算基本方法
- 【Android笔记】Android统计文件夹大小,删除文件夹下的所有文件方法
- C++学习笔记二之4种访问名称空间std的方法
- 用SQL统计SQLServe表存储空间大小
- C++中的动态空间扩充方法
- 学雷锋之工厂方法模式学习笔记[C++版]
- C++名字空间与包含头文件的方法
- [转]关于VC中动态申请空间大小查看的方法
- 关于统计图库jpgraph的一些方法使用笔记
- ASE15.0中利用代理表实现统计用户表存储空间大小的功能
- C++学习的一些笔记-->2:防止头文件多次导入造成重复编译的方法
- 金庸小说考试之模板方法模式学习笔记[C++版]
- 学雷锋之工厂方法模式学习笔记[C++版]
- VMware改变硬盘空间大小的方法
- 金庸小说考试之模板方法模式学习笔记[C++版]
- C++学习笔记(6)——多重继承类对象的构造函数参数的传递方法
- C/C++多种方法获取文件大小
- 简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
- C++中的动态空间扩充方法
- 如何统计Sql server2000表行数及占用空间大小