[关闭]
@CrazyHenry 2018-03-03T09:06:42.000000Z 字数 1285 阅读 1345

0.x 8.C语言Sizeof解析

ccccC++Primer


http://blog.csdn.net/lime1991/article/details/44536343
http://blog.csdn.net/jollyhope/article/details/1895357
https://www.jianshu.com/p/46acf45ee795

1.关于32位机和64位机

不同机型下,变量的位数都可能不同:
一般来说32位机情况:

image.png-29.8kB

以下均考虑32位机

2.关于progma pack(n)

模数是【#pragma pack指定的数值】、【未指定#pragma pack时,系统默认的对齐模数8字节】和【结构体内部最大的基本数据类型成员】长度中数值较小者。

空类是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。

(一)类内部的成员变量:

(二)类内部的成员函数:

  1. #pragma pack (n) 作用:C编译器将按照n个字节对齐。
  2. #pragma pack () 作用:取消自定义字节对齐方式。
  3. #pragma pack (push,1) 作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐
  4. #pragma pack(pop) 作用:恢复对齐状态

3.位域

http://blog.csdn.net/mydreamremindme/article/details/10285533

4.union

  1. //32位机
  2. //含有联合体的结构体的sizeof
  3. struct s1
  4. {
  5. char *ptr,ch; //模为4,则4+4=8
  6. union A //后面跟了A标书定义了一个类型,不占内存,而后面不跟A,是声明了结构体的一个成员,占内存。这种事内部类的用法
  7. {
  8. short a,b;
  9. unsigned int c:2, d:1;
  10. };
  11. struct s1* next; //指针占4
  12. };//这样是8+4=12个字节
  13. struct s1
  14. {
  15. char *ptr,ch; //4+4
  16. union //联合体是结构体的成员,占内存,并且最大类型是unsigned int,占4
  17. {
  18. short a,b; //最大占2
  19. unsigned int c:2, d:1; //最大占4
  20. };
  21. struct s1* next; //4
  22. };//这样是16字节
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注