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) 之后,默认以类中或者结构中最大的变量字节对齐。 

原文地址:https://www.cnblogs.com/lsx1993/p/4841830.html