数据类型的大小与编译器、cpu、操作系统的关系

一、前言

关于这个话题讨论的很多,观点也很多,但是我认为数据类型的大小和编译器直接相关。另外附上一个网友的回帖:

不要迷信书、考题、老师、回帖;
要迷信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

https://zhidao.baidu.com/question/1367756973266688539.html

https://blog.csdn.net/ChenVast/article/details/77540273

你可能感兴趣的:(嵌入式软件)