C++ sizeof计算class大小

 
1 类与结构一样,都有字节对齐的问题
2 类中普通的函数不占用类的大小
3 类中虚函数占用一个地址位宽(4或8字节),且不论有多少个虚函数一共只占这么多
4 类中常量不占用类大小: const static /   enum{aa=2,bb=4};
5 类中static修饰的变量不占用类大小,因为修饰后存储在静态区域
6 子类的大小等于子类新增的加上父类的大小
 
1 sizeof是用来计算栈大小,不涉及全局区,故类的静态成员大小sizeof不涉及。
2 本题中的虚函数属于同一个类,故只需要一个指针指向虚函数表,所以在64位系统中占用8个字节。就算本题有100个虚函数,那么也只占用8个字节。
综上,占用栈空间的成员有:a, p, func1, func2,由于64位对其,故总空间为8+8+8=24字节。
 
sizeof(类)计算的是类中存在栈中的变量的大小,而类中的b和*c都是static静态变量,存在全局区中,因此不在计算范围之内,于是只剩下char a,void *p和两个virtual虚函数,a是char类型,占用一个字节,p是指针,在64位系统的指针占用8个字节,而两个虚函数只需要一个虚函数表指针,也是八个字节,加上类中的对齐方式(char a对齐时后面补上7个字节),故答案为24.
posted @ 2017-04-07 10:18  爱编程的小羊  阅读(1059)  评论(0编辑  收藏  举报