Outline
1.数据类型所在字节数与程序运行平台有关
2.列举各种数据类型所占字节数
1.数据类型所在字节数与程序运行平台有关
不同的平台上对不同数据类型分配的字节数是不同的。
平台环境的理解:硬件架构 操作系统(OS) 编译器(Compiler)
程序的运行环境取决于上述配件。
原因:
64位机器也可以装32位系统(x64装XP);
32位机器上可以有16/32位的编译器;
即使是32位的编译器也可以弄出64位的integer来(int64)。
理论上讲 某种数据类型在我这种运行环境下占多大内存空间,应该是有CPU决定,因为真正执行指令,调度操作的是CPU,但我认为实际上是由编译器事先决定,在编译期间,会决定考虑为该类型分配多少内存。
2.32位的环境下,基本数据类型所占字节
数据类型 | 所占字节 |
---|---|
char | 1B |
short int(short) | 2B |
int | 4B |
unsigned int | 4B |
float | 4B |
double | 4B |
long int(long) | 4B |
long long | 8B |
unsigned long | 4B |
char* | 4B |
注意:指针变量所占的字节数与数据类型无关(与什么数据类型的指针没有关系),而是与多少位的环境有关,因为这决定了该环境的机器的寻址能力有多大!
比如:32位的环境 其中一个bit位要么是0要么是1,因此32位做多能表达2^32个地址空间,同理64位的环境,指针变量占64bit即8B。
另外,以32位机 int类型为例 来计算其取值范围:int类型占4B即32位 由于int是符号型 也就是说要去除1个bit位表示符号位(正负),其次数值0计算了两次 因此也要-1
也即:[-2^31 ~ 2^31-1]
3. 64位的环境下,基本数据类型所占字节
数据类型 | 所占字节 |
---|---|
char | 1B |
short int(short) | 2B |
int | 4B |
unsigned int | 4B |
float | 4B |
double | 8B |
long int(long) | 8B |
long long | 8B |
unsigned long | 8B |
4. sizeof()关键字(保留字) 【并非是一个函数】
作用:sizeof关键字可以统计数据类型所占用的内存大小
语法:sizeof(变量名) sizeof(数据类型)
注意:在定义实型(浮点数类型)中的float时,应当在具体数值后边加上 f 如下:
float f1 = 3.1415926535f;
原因在于:float类型表示小数时,在数字末尾显式地使用字母f表示单精度,否则编译器会默认将小数视为双精度浮点型(double),再进行类型转换(由double型转换为float型)。