计算类的的大小时只考虑成员变量的大小,而不考虑成员函数的大小!
但是如果类中含有虚函数,那么在计算类的大小时就要额外的加上4个字节!这4个字节是虚函数表占的字节数!
在计算类的大小时还要注意一点就是 内存对齐!
看一个例子:
class CTest
{
char ch;
};
{
char ch;
};
// sizeof(CTest) = 1
class CTest
{
char ch;
int num;
};
{
char ch;
int num;
};
// sizeof(CTest) = 8
很奇怪,为什么第二个CTest的大小是8字节了,这里就涉及到了内存对齐问题
int的大小为 4字节, 由于内存所以ch的填充3个字节!所以CTest的大小为8字节
再来看一列:
class CTest
{
char ch;
int num;
double b;
};
{
char ch;
int num;
double b;
};
// sizeof(CTest) = 16
这里ch+num=5字节,填充到b的大小,也就是8字节!
class CTest
{
char ch;
double b;
int num;
};
// sizeof(CTest) = 24
这里ch和num都填充到了8字节
继承类大小
class CT1()
{
int num;
}; class CT2 : public CT1
{
int val;
}; // sizeof(CT2) = 4+4 = 8;
{
int num;
}; class CT2 : public CT1
{
int val;
}; // sizeof(CT2) = 4+4 = 8;
sizeof (继承类) = 本身成员变量+父类的大小,如果是虚拟继成的话,则另外加一个指向父类指针的大小.
如果两个类C1,C2分别继承了含有虚函数的类C3,类C4同时继承C1和C2,那么在C4只保留一份指向虚基类C3的指针
原文链接: https://www.cnblogs.com/CPFlying/archive/2010/05/30/1747580.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/11320
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!