2017-10-05 153 views
0

我知道下面的數據模型存在:Linux的數據模型和原始類型大小

  • 32位的* nix:ILP32
  • 32位Windows:ILP32
  • 32位OS X :ILP32
  • 64位* nix中:LP64
  • 和64位Windows:LLP64
  • 64位OSX:LP64

http://www.unix.org/whitepapers/64bit.html

Linux內核的64位版本使用LP64數據模型(http://www.unix.org/version2/whatsnew/lp64_wp.html)。

UPDATE

C++ 03標準$ 5.3.3/1

的sizeof(char)的,的sizeof(符號字符)和sizeof(無符號字符)爲1;適用於任何其他基本類型(3.9.1)的sizeof的 結果是實現定義的 。 [注:特別的sizeof(布爾)和 的sizeof(wchar_t的)是實現defined.69)

所以真正的問題是: 該編譯器(如GCC)考慮到所選擇的數據模型由操作系統(例如Linux)?

+1

用於編譯OS的編譯器如何? –

+0

Ron,這兩種語言都沒有定義基本類型的大小。這個問題是有效的,我知道這是兩種不同的語言。這裏的關鍵在於操作系統(選擇數據模型)和編譯器之間。 – Kasper

+0

@Ron:不! C和C++標準都沒有定義原始類型的大小! char,float和double的例外。 – Kasper

回答

0

編譯器針對特定目標進行編譯。一些編譯器只有一個目標或一組非常有限的目標。既然你問過gcc作爲例子,那麼查看他們的文檔就會發現他們的格式爲Machine DescriptionsTarget Files

Their documentation mentions

默認情況下,GCC編譯代碼,同一類型的機器所使用。然而,它也可以安裝一個交叉編譯器

所以一定要檢查的gcc -vgcc -dumpmachine輸出看到默認的目標是什麼。