2011-04-28 128 views
16

我一直在想這個很長一段時間,因爲我從來沒有在計算機科學(我在高中)「正式」的教育,所以請原諒我的無知就此主題而言。16位的int VS 32位的int和64位INT

在一個支持標題中列出的三種整數類型的平臺上,哪一個更好,爲什麼? (我知道每一種int在內存中的長度都不相同,但我不確定這意味着什麼或者它如何影響性能,或者從開發者的角度來看,哪一個比另一個更有優勢)。

非常感謝您的幫助。

+1

您應該閱讀Charles Petzold的書「[CODE](http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/)」。 – 2013-01-22 17:59:10

回答

21

「更好」是一個主觀術語,但某些整數在某些平臺上表現更好。

例如,在32位計算機(由像32位平臺和Win32這樣的術語引用)中,CPU經過優化以一次處理32位值,而32指的是CPU可以在一個週期內消耗或產生。 (這是一個非常簡單的解釋,但它得到了總體思路)。

在64位計算機的(最近的AMD和Intel處理器屬於這一類),則CPU被優化以一次處理64位的值。

所以,在32位平臺上,加載到32位地址的16位整數將需要有16位清零,使CPU可以對其進行操作;一個32位整數可以立即使用而不需要任何改動,並且一個64位整數需要在兩個或多個CPU週期內運行(一次是低32位,然後是32位高) 。相反,在64位平臺上,16位整數需要將48位清零,32位整數需要32位清零,並且可以立即操作64位整數。每個平臺和CPU具有「原生」位(如32或64),這通常會限制該CPU可以訪問的其他一些資源(例如,3GB/4GB內存限制爲32位處理器)。 80386處理器系列(及更高版本的x86)處理器制定了32位標準,但現在AMD和Intel等公司目前正在制定64位標準。

+0

爲了完整起見,您應該添加明顯的並提及不同的最小值和最大值。另外你說的位需要被清零,這是否意味着在32位系統上使用16位整型比使用32位整型更慢呢? – 2016-05-17 08:00:20

4

一個簡單的答案是使用你知道的最小的一個對於它將包含的可能值的範圍是安全的。

如果您知道可能的值被限制爲小於最大長度的16位整數(例如對應於一年中的某一天的值 - 總是< = 366),那麼請使用該值。如果您不確定(例如,數據庫中可以有任意行數的表的記錄標識),則根據您的判斷使用Int32或Int64。

其他可能就會給你的,這取決於您所使用的編程語言的性能優勢更好的感覺,但較小的類型使用較少的內存,因此是「好」的,如果你不需要使用大。

只是爲了參考,一個16位的整數意味着有2^16個可能的值 - 通常表示爲65,535之間0和。 32位值最高可達2^32或超過42.9億。

這個問題On 32-bit CPUs, is an 'integer' type more efficient than a 'short' type?可能會增加一些更好的信息。

8

爲了回答第一個問題,一個16位的VS 32位Vs的64位整數的使用取決於其使用的上下文。因此,你說實在不能說一個人比另一個人更好。但是,根據情況,最好使用一個。考慮這個例子。假設你有一個擁有1000萬用戶的數據庫,並且你想存儲他們出生的那一年。如果您在數據庫中使用64位整數創建一個字段,那麼您已經耗盡了80兆字節的存儲空間;而如果您要使用16位字段,則只能使用20兆字節的存儲空間。你可以在這裏使用一個16位的字段,因爲人們出生的年份小於最大的16位數字。換句話說,1980年,1990年,1991年< 65535,假設你的領域是無符號的。總而言之,這取決於上下文。我希望這有幫助。

+0

數據庫空間使用情況取決於數據庫,對於Oracle而言不是這樣,只會使用表示數字所需的字節數。 – 2015-03-17 11:11:11

1

這取決於是否應優化速度或存儲。如果您對速度感興趣,並且您在64位模式下運行SQL Server,那麼64位密鑰就是您所需要的。以64位模式運行的64位處理器經過優化,可使用64位數字和地址。同樣,以32位模式運行的64位處理器經過優化以使用32位數字和地址。例如,在64位模式下,所有推入和彈出到堆棧的內容都是8個字節等。同樣,從緩存和內存中提取也針對64位數字和地址進行了優化。以64位模式運行的處理器可能需要更多機器週期來處理32位數,就像處理器一樣,以32位模式運行需要更多機器週期來處理16位數。處理時間的增加有很多原因,但考慮內存對齊的例子:32位數字可能不會在64位整數邊界上對齊,這意味着加載數字需要在將數字加載到寄存器。至少在每次操作之前,每32位數字必須被屏蔽。我們正在談論的是在64位模式下處理32或16位整數時,處理器的有效速度至少減半。