一、前言
关于这个话题讨论的很多,观点也很多,但是我认为数据类型的大小和编译器直接相关。另外附上一个网友的回帖:
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
关于cpu和操作系统的参见以博客:
https://blog.csdn.net/wwwlyj123321/article/details/99940786
二、结论
数据类型(如int、short int、long、float等)只是语言定义里面的一个关键字,只对compiler可见,complier说它是几位就是几位,和os/cpu都没关系。这也就是为什么很多程序不用int,short,long,而是自己定义int32_t, int16_t, uint32_t, ...,以后不管cpu/compiler怎么变,它只需要改改自己的typedef。
另外,确定一个数据类型所占空间的最好的方式是使用sizeof!
NOTE:
编译器的作用是根据目标硬件(即CPU)的特性将源程序编译为可在该硬件上运行的目标文件。如果一个编译器支持某32位的CPU,那么它就可以将源程序编译为可以在该CPU上运行的目标文件。
以下为转载,未做验证:
以char, short, int, long为例:
16位编译器:(Turbo C/Turbo C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 2
sizeof(long) = 4
sizeof(long double) = 16
sizeof(void *) = 4
32位编译器:(Visual Studio C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(void *) = 4 (表示指针类型数据长度)
64位编译器:
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(void *) = 8
REF:
https://blog.csdn.net/bi_mang/article/details/51824290