2015-10-21 115 views
0

在Intel文檔中,我已經讀過Intel x86 64位機器的C數據類型'long'的大小爲8個字節。 但是,當我在我的電腦,其具有英特爾(R)核心(TM)13上運行這個簡單的代碼 - 64位處理器:C數據類型'long'在Intel x86 64位機器上

printf("size of long, is %d", sizeof(long));

控制檯輸出爲4(而不是8)!任何人都可以解釋這種差異或相同的原因。 謝謝

+1

安裝了哪個操作系統,是32位還是64位操作系統。 – Kamal

+1

你使用什麼編譯器? –

+1

什麼編譯器和哪個版本? 32位或64位? – user3528438

回答

6

所有C標準說的是,long必須至少32位,這意味着sizeof(long) >= 4(的sizeof的單元,其被稱爲一個字節,對幾乎所有的8位你可能遇到的平臺)。

每個ABI定義了這些類型的大小。您需要有兼容的ABI來鏈接使用不同程序編譯的代碼,所以總的來說,每種操作系統的每種類型的處理器都有一個標準ABI。這只是一個趨勢:某些操作系統具有多個ABI,具體取決於使用的編譯器和標準庫。

處理器製造商通常會定義一個ABI,但是這取決於操作系統和編譯器供應商決定是否尊重它。

在x86_64上,Intel指定了一個64位的long。這是大多數操作系統所做的,但有一個主要的例外:Windows。在Windows上,標準ABI(由系統庫和供應商提供的開發工具使用的)有一個32位的long。 64位類型可用int64_tlong long

-1

嘗試sizeof(unsigned long long),這應該是64位。

長可能是32位

+0

'長'不保證是32位。 –

+1

其保證爲Windows。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx。 – Nandu

+3

不,它可以保證* Windows的某些*編譯器*。 –

相關問題