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
浙公网安备 33010602011771号