數據類型的大小與編譯器、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章