[c++] sizeof ()

sizeof 操作符

功能:返回某个对象或者某种类型所占用空间的大小(byte)

usage:sizeof(obj/Type)或者sizeof obj/Type,习惯写成前者的形式。

以下列出一些重要的计算方法:(其余待补充)

1. 空类为1; 

 2. 以类中最长的数据成员对齐,即每个数据成员的大小按最大的那个计算;

 3. 子类的大小等于父类与自身的和,也符合对齐原则;

 4. 含虚函数的类有一个指向虚函数表的指针,大小一般为4;

    即使有多个虚函数,也只有一个指向虚函数表的指针;

5. static成员不计算在内;

6. 虚继承父类的子类中有一个指向虚基类表的指针,大小一般为4;

    虚继承时,若父类和子类均有虚函数,则它们有各自的虚函数表指针;

View Code
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 class A
6 {};
7
8 class B
9 {
10 char a;
11 private:
12 int b;
13 static int aa;
14 };
15
16
17 class C:public A
18 {
19 };
20
21 class D:public A
22 {
23 int a;
24 double d;
25 };
26 class E:private B
27 {
28 int b;
29 };
30 class F
31 {
32 F();
33 virtual ~F();
34 virtual void f();
35 char c;
36 };
37 class G:public F
38 {
39 G();
40 ~G();
41 virtual void func();
42 char cc;
43 };
44
45 class V
46 {
47 V();
48 virtual ~V();
49 char c;
50
51 };
52 class V1:virtual V //虚继承
53 {
54 char a;
55 };
56 class V2:virtual V
57 {
58 V2();
59 virtual ~V2();
60 int a;
61 };
62 class V3:V1,V2
63 {
64 int a;
65 };
66
67 struct SA
68 {};
69 struct SB
70 {
71 char a;
72 int b;
73 };
74 struct SC:public SB
75 {
76 char c;
77 };
78 struct SD
79 {
80 SD();
81 virtual ~SD();
82 char a;
83 };
84
85 void func(int a[10])
86 {
87 cout<<"\nfunction's array param: "<<sizeof(a)<<endl;
88 }
89
90 /*
91 sizeof()
92 1.空类为1;
93 2.以类中最长的数据成员对齐,即每个数据成员的大小按最大的那个计算;
94 3.子类的大小等于父类与自身的和,也符合对齐原则;
95 4.含虚函数的类有一个指向虚函数表的指针,大小一般为4;即使有多个虚函数,也只有一个指向虚函数表的指针;
96 5.static成员不计算在内;
97 6.虚继承父类的子类中有一个指向虚基类表的指针,大小一般为4;虚继承时,若父类和子类均有虚函数,则它们有各自的虚函数表指针;
98 */
99 int main()
100 {
101
102 //testing sizeof
103 int a;
104 char c;
105 double f;
106 string str;
107 string str2("hello");
108 cout<<"\nbasic type's sizeof():"<<endl;
109 cout<<sizeof(a)<<" "<<sizeof(c)<<" "<<sizeof(f)<<" "<<sizeof(str)<<" "<<sizeof(str2)<<endl;
110
111 char *p;
112 char str3[]="hello";
113 char *p2="hello";
114 char p3[5];
115 cout<<"\npointer's sizeof():"<<endl;
116 cout<<sizeof(p)<<" "<<sizeof(str3)<<" "<<sizeof(*p2)<<" "<<sizeof(p2)<<" "<<sizeof(p3)<<endl;
117
118 int iarray[10];
119 func(iarray);
120
121 cout<<"\nclass type's sizeof():"<<endl;
122 cout<<sizeof(A)<<" "<<sizeof(B)<<" "<<sizeof(C)<<" "<<sizeof(D)<<" "<<sizeof(E)<<" "<<sizeof(F)<<" "<<sizeof(G)<<endl;
123
124 cout<<"\n虚继承 sizeof(): "<<endl;
125 cout<<sizeof(V)<<" "<<sizeof(V1)<<" "<<sizeof(V2)<<" "<<sizeof(V3)<<endl;
126
127 cout<<"\nstruct type's sizeof():"<<endl;
128 cout<<sizeof(SA)<<" "<<sizeof(SB)<<" "<<sizeof(SC)<<" "<<sizeof(SD)<<endl;
129
130
131 int pause;
132 scanf("%d",&pause);
133
134 return 0;
135 }

posted @ 2011-04-17 23:51  mufeng100  阅读(299)  评论(2)    收藏  举报