sizeof的使用
当通过sizeof获得c++类的大小时,有以下几个因素会影响其结果:
1,和结构体一样,字节对齐
2,是否存在虚函数
3,非静态成员变量的顺序
4,父类的大小
5,继承父类的模式
6,非静态成员变量
7,所使用的编译器
目前针对微软的编译器做个探讨,以下代码就是针对前面6点做的测试用例,它们是如何影响sizeof的值:
#include <iostream> using namespace std; class test1 {
}; class test2 { char sz1; char sz2; int n1; }; class test3 { char sz1; int n1; char sz2; }; class test4 { char sz1; int n1; char sz2; static float f1; }; class test5 { char sz1; int n1; char sz2; const double d1; }; class test6 { void test(); }; class test7 { virtual void func(); }; class test8 { int n1; virtual void func1(); }; class test9 { int n1; virtual void func1(); virtual void func2(); }; class test10 : public test6{ }; class test11 : public test3 { float f1; }; class test12 : public test8, public test9 { }; class test13 : virtual public test8, virtual public test9 { }; class test14 : public test8, virtual public test9 { }; int _tmain(int argc, _TCHAR* argv[]) { cout << "test1:" << sizeof(test1) << endl; cout << "test2:" << sizeof(test2) << endl; cout << "test3:" << sizeof(test3) << endl; cout << "test4:" << sizeof(test4) << endl; cout << "test5:" << sizeof(test5) << endl; cout << "test6:" << sizeof(test6) << endl; cout << "test7:" << sizeof(test7) << endl; cout << "test8:" << sizeof(test8) << endl; cout << "test9:" << sizeof(test9) << endl; cout << "test10:" << sizeof(test10) << endl; cout << "test11:" << sizeof(test11) << endl; cout << "test12:" << sizeof(test12) << endl; cout << "test13:" << sizeof(test13) << endl; cout << "test14:" << sizeof(test14) << endl; getc(stdin); return 0; }
结果如下:
test1:1
test2:8
test3:12
test4:12
test5:24
test6:1
test7:4
test8:8
test9:8
test10:1
test11:16
test12:16
test13:20
test14:20