2011-04-28 160 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位整数时,处理器的有效速度至少减半。