一、下图是16位、32位、64位编译器环境下不同数据类型和指针申请内存时所占用的字节空间大小。
数据类型 | 16位编译器环境(byte) | 32位编译器环境(byte) | 64位编译器环境(byte) | 取值范围 |
char | 1 | 1 | 1 | -128 ~ 127 |
unsigned char | 1 | 1 | 1 | 0 ~ 255 |
short int / short | 2 | 2 | 2 | -32768~32767 |
unsigned short | 2 | 2 | 2 | 0 ~ 65535 |
int | 2 | 4 | 4 | -2147483648~2157483647 |
unsigned int | 2 | 4 | 4 | 0~4294967295 |
long int / long | 4 | 4 | 8 | -2147483648~2147483647 |
unsigned long | 4 | 4 | 8 | 0~42294967295 |
long long int / long long | 8 | 8 | 8 | -9223372036854775808 |
double | 8 | 8 | 8 | 1.7E+10的负308次⽅~1.7E+10的正308次⽅ |
float | 4 | 4 | 4 | 3.4E+10的负38次⽅~3.4E+10的38次⽅ |
long double | 10/12 | 10/16 | 有效位10字节。32位为了对齐实际分配12字节;64位分配16字节 | |
指针 | 2 | 4 | 8 | / |
总结:
常用的32位操作系统和64位操作系统对比:除了 * 与long随操作系统子长变化而变化外,其他的都固定不变:bool 1个字节 、char 1个字节、 int 4个字节、float 4个字节 、doubl 8个字节、long long 8个字节