c++中各类型数据所占字节数(⼀)
转⾃:
和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器⽽异。但有⼏条铁定的原则(ANSI/ISO制订的):
1 sizeof(short int)<=sizeof(int)
2 sizeof(int)<=sizeof(long int)
3 short int⾄少应为16位(2字节)
4 long int⾄少应为32位。 unsigned 是⽆符号的意思。
例如:
16位编译器 char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节
32位编译器
sizeof 指针char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节
64位编译器 char :1个字节 char*(即指针变量): 8个字节 short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long: 8个字节 long long: 8个字节 unsigned long: 8个字节
总结:不同位数的编译器指针变量的字节数不同,指针变量即地址,亦即寻址空间,等于2^编译器位数
注意:对字符串进⾏sizeof操作的时候,会把字符串的结束符"\0"计算进去的,进⾏strlen操作求字符串的长度的时候,不计算\0的。数组作为函数参数传递的时候,已经退化为指针了
在类中,如果什么都没有,则类占⽤1个字节,⼀旦类中有其他的占⽤空间成员,则这1个字节就不在计算之内,如⼀个类只有⼀个int则占⽤4字节⽽不是5字节。
如果只有成员函数,则还是只占⽤1个字节,因为类函数不占⽤空间
虚函数因为存在⼀个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。