类占用多少空间
一个类中的函数占用多少空间,我是这样算的:
(1)为了作区分,类必须要有储存空间,所以对于空类会分配1字节空间。
(2)一般函数是直接调用其入口地址,相当于只声明,所以不占用任何空间。
(3)虚函数不占对象的空间!但是指向虚函数表vTable的指针占4个字节的空间,不论你类里有多少个虚函数,你的对象大小只增加4个字节。
上面计算方法应该是没问题的,可是下面这个结果怎么解释呢?
根据类里面的字节对齐原则,我写了如下程序:
class X{
public:
X();
virtual void myVirtualFunc();
};
int main()
{
printf("%d\n",sizeof(X));
return 0;
}
运行结果为4。
可是他应该是1(类空间)+4(虚函数表指针)=5,字节对齐,结果应该是8的呀,这怎么解释?如果把虚函数myVirtualFunc去掉的话结果是1,难道如果加上了虚函数,类原来的1字节的空间就可以不要了?