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

 

posted @ 2014-10-07 19:27  kobofare  阅读(57)  评论(0)    收藏  举报