C++之 sizeof 知多少

C++之 sizeof 知多少

sizeof计算的是在栈中分配的内存大小。

1. sizeof的使用形式:sizeof(var_name)或者sizeof var_name。变量名可以不用括号括住:sizeof a;数据类型必须用括号括起来:sizeof(int)。

2. sizeof可以对表达式求值:sizeof(2+3.14),实际是sizeof(double)。

3. sizeof可以对函数调用求值,实际上是对返回值类型求值;对引用的sizeof,其实是对其所绑定的对象的sizeof。

4. 以下情况不能用sizeof进行求值。

      1)不能对函数名求值

      2)不能对不确定返回值的类型求值,如void

      3)位域成员不可以使用sizeof求值

5. sizeof的结果是size_t,它被定义为unsigned int类型。该类型保证容纳显示所建立的最大对象的字节大小。

  一般,在32位编译器下:
      sizeof(int):4
      sizeof(short):2
      sizeof(long):4
      sizeof(long long):8
      sizeof(float):4
      sizeof(double):8
      sizeof(char):1
      sizeof(p):4,(p为指针) (32位系统下指针的sizeof是4字节,64位下是8字节)

  在不同的系统中这些值不一样。

6. sizeof与strlen()比较,在计算字符数组时,sizeof包含'\0',strlen()不包含'\0'。

7. 对数组sizeof可以计算数组的大小。

8. 数组作为形参时,数组名的sizeof是4个字节。

9. 32bit系统中,int **a[3][4];sizeof(a)=48。

10. 对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节),且字符串尾有空字符。

11. 枚举的空间计算
  enum只是定义了一个常量集合,里面没有“元素”,而枚举是当做int类型存储的,故枚举类型的sizeof值为4。

12. 含静态变量、虚函数和字节对齐的类的空间计算。



猜你喜欢

转载自blog.csdn.net/qq_27022241/article/details/80397896