sizeof內存對齊ios |
1 #include "iostream" spa
2 using namespace std; 內存
3 ci
4 void main() io
5 { table
6 class A class
7 { stream
8 變量
9 nio
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) 以後,默認以類中或者結構中最大的變量字節對齊。