C++类的大小计算
来源:互联网 发布:js stringdate比较 编辑:程序博客网 时间:2024/05/13 00:49
1.空类的大小:
class C2
{
};
结果:sizeof(C2) = 1
分析:这是因为当我们实例化一个类对象时,就是为其分配内存空间,并且每一个实例化的类都会有一个独一无二的内存地址,空类也不例外,必须为其分配一个内存,因此编译器给分配了一个字节的内存,使其独一无二。
2.只含有一个虚函数的类的大小:
class C1
{
public:
virtual int sum(int i1, int i2)
{
return (i1 + i2);
}
protected:
private:
// double m_dvar1;
// char m_cVar2;
};
结果:sizeof(C1) = 4
分析:虚函数指针占四个字节。
3.对齐原则. 当一个类里有个数据类型占字节数最大时, 其他数据类型大小和最大的对齐.。
情况1:class C1
{
public:
// virtual int sum(int i1, int i2)
// {
// return (i1 + i2);
// }
protected:
private:
double m_dvar1;
char m_cVar2;
};
结果:sizeof(C1) = 16
分析:m_dvar1占8个字节,m_cVar2占一个字节,但是m_cVar2要与m_dvar1保持对齐,所以 8 × 2 = 16
情况2:class C1
{
public:
// virtual int sum(int i1, int i2)
// {
// return (i1 + i2);
// }
protected:
private:
double m_dvar1;
char m_cVar2;
int m_ivar3;
};
结果:sizeof(C1) = 16
分析:m_cVar2 和m_ivar3相加没有超过8个字节,算成8个字节,与m_dvar1一共还是16个字节。
情况3:有虚函数存在时
class C1
{
public:
virtual int sum(int i1, int i2)
{
return (i1 + i2);
}
protected:
private:
double m_dvar1;
char m_cVar2;
// int m_ivar3;
};
结果:sizeof(C1) = 24
分析:如果有虚函数存在,虚函数会单独处理,不遵守对齐原则,m_cVar2补齐8字节,虚函数补齐8字节,加上m_dvar1 8+ 8+ 8 = 24
4.类中存在静态成员变量
class C1
{
public:
virtual int sum(int i1, int i2)
{
return (i1 + i2);
}
protected:
private:
// double m_dvar1;
char m_cVar2;
// int m_ivar3;
static int data1;
};
结果:sizeof(C1) = 8
分析:静态成员变量被编译器存放在global data members中,不影响类的大小,类是否被实例化,它都存在。
以后遇到其它情况再总结。
- C/C++--类占用内存的大小计算
- C/C++--类占用内存的大小计算
- 类的大小计算
- 类大小的计算
- 类大小的计算
- [C++]结构体的大小的计算
- C中结构体大小的计算
- C中含位域结构体大小的计算
- C++类的大小计算
- sizeof计算类的大小
- 类的大小计算(sizeof())
- sizeof计算类的大小
- c++类的大小计算
- C++ 类的大小计算
- 类/对象大小的计算
- C语言中如何计算结构体的大小
- c中union和struct类型的大小计算
- 【c语言】结构体大小计算的例子
- .net用代码配置Web.config文件
- C++中的四种显式类型转换之static_cast
- 添加右键菜单
- mssql2005 远程连接问题解决方法
- matlab多花条线
- C++类的大小计算
- VIM的配置文件在哪里?(Windows版)
- C#winform中只允许程序运行一个实例
- .Net中Remoting通信的应用,有发送和返回信息
- PS去掉图片上的文字的6种基本方法
- ARM处理器之MMU和Cache
- 浅谈设计模式
- FTP命令详解
- TestNG v.s. JUnit4