sizeof

 

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) 以後,默認以類中或者結構中最大的變量字節對齊。 

相關文章
相關標籤/搜索