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。