C标准并没有具体规定哪个基本类型应该占多少字节,具体与机器、OS、编译器有关。
1、直接说结论
规律:
1、在win32和win64环境下数据类型所占字节数是一样的,不同的只有指针类型。
2、win系统下long都占4个字节,仅在Linux64下long占8个字节
2、验证
(1)win10操作系统,VS2019
在该环境下通过变换×86和×64切换32位与64位。
验证代码如下:
#include<stdio.h>
int main()
{
int a = 9;
int* p = &a;
printf("sizeof(char)=%d\n", sizeof(char));
printf("sizeof(short)=%d\n", sizeof(short));
printf("sizeof(int)=%d\n", sizeof(int));
printf("sizeof(long)=%d\n", sizeof(long));
printf("sizeof(long long )=%d\n", sizeof(long long));
printf("sizeof(float)=%d\n", sizeof(float));
printf("sizeof(double)=%d\n", sizeof(double));
printf("sizeof(p)=%d\n", sizeof(p));
return 0;
}
打印结果如下:
win64位结果: win32位结果:
sizeof(char)=1 sizeof(char)=1
sizeof(short)=2 sizeof(short)=2
sizeof(int)=4 sizeof(int)=4
sizeof(long)=4 sizeof(long)=4
sizeof(long long )=8 sizeof(long long )=8
sizeof(float)=4 sizeof(float)=4
sizeof(double)=8 sizeof(double)=8
sizeof(p)=8 sizeof(p)=4//仅指针项不同
(2)Ubuntu 18.04 ,64位,gcc编译工具
同样的代码,执行结果为:
linux64位结果:
sizeof(char)=1
sizeof(short)=2
sizeof(int)=4
sizeof(long)=8//仅这项不同,其余与win64一样
sizeof(long long )=8
sizeof(float)=4
sizeof(double)=8
sizeof(p)=8
到此为止,“win系统下long都占4个字节,仅在Linux64下long占8个字节”这句话得到了验证。
今后将继续在不同环境下实验,补充该文。