sizeof
sizeof内存对齐 |
1 #include "iostream"
2 using namespace std;
3
4 void main()
5 {
6 class A
7 {
8
9
10
11 }a;
12
13
14 cout<<sizeof(a)<<endl;
15
16 }
运行结果是:1.空类占用的内存大小是1,空类没有数据成员,但是必须分配一定的空间,说明其存在,只好定义为一个最小的char大小
2,看代码:
[cpp] view plaincopy
17 #include "iostream"
18 using namespace std;
19
20 void main()
21 {
22 class A
23 {
24
25
26 typedef char* (*f)(void*);
27 }a;
28
29
30 cout<<sizeof(a)<<endl;
31
32 }
运行结果是:1.类中加了个typedef定义,但是并不是类的成员,不计入内存
3,看代码:
[cpp] view plaincopy
33 #include "iostream"
34 using namespace std;
35 #pragma pack(2)
36 void main()
37 {
38 class A
39 {
40 unionU
41 {
42 char buff[13];
43 int i;
44 }u;
45 voidfoo() { }
46 inti;
47 enum{red, green, blue} color;
48
49 typedef char* (*f)(void*);
50 }a;
51
52
53 cout<<sizeof(a)<<endl;
54
55 }
输出结果:22. sizeof(u)=13+1,sizeof (i)=4;sizeof(color)=4,typedef 不占用内存 总计 22.
[cpp] view plaincopy
56 #pragma pack(2) 表示内存按照2字节对齐
4,看代码[cpp]view plaincopy
57 #include "iostream"
58 using namespace std;
59 void main()
60 {
61 class A
62 {
63 unionU
64 {
65 char buff[13];
66 int i;
67 }u;
68 voidfoo() { }
69 inti;
70 enum{red, green, blue} color;
71
72 typedef char* (*f)(void*);
73 }a;
74
75
76 cout<<sizeof(a)<<endl;
77
78 }
运行结果:24.去掉 [cpp]view plaincopy
79 #pragma pack(2) 之后,默认以类中或者结构中最大的变量字节对齐。