空类内存sizeof
class A
{};
int main(void)
{ A a;
printf("%d\n",sizeof(a));
return 0;
}
运行结果为
原因是在空类实例如果不在内存中占一定的空间,则无法使用这些实例。
若在类里加成员函数,而不加成员变量,则实例所占空间还是1,因为调用函数只需要知道函数地址即可,函数地址只需要知道实例的类即可。
#include<stdio.h>
class A
{public:
int fun(int a)
{printf("dd");
}
};
int main(void)
{ A a;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(A));
return 0;
}
若类里增加虚成员函数,
#include<stdio.h>
class A
{public:
virtual int fun(int a)
{printf("dd");
return 0;
}
};
int main(void)
{ A a;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(A));
return 0;
}
则运行结果为
因为存在虚函数的类的实例中会添加一个指向虚函数表的指针,在32位系统中指针占4字节。