我一直想知道这已经很长时间了,因为我从未接受过有关计算机科学的“正式”教育(我在高中),所以请原谅我对这个主题的无知。

在支持标题中列出的三种类型的整数的平台上,哪个更好,为什么? (我知道每种INT在内存中的长度都不同,但是我不确定这意味着什么或如何影响性能,或者从开发人员的角度来看,哪个比另一个具有更优势)。

预先感谢您的帮助。

有帮助吗?

解决方案

“更好”是一个主观的术语,但是某些整数在某些平台上更具性能。

例如,在一台32位计算机(由32位平台和Win32等术语引用)中,CPU一次用于处理32位值,而32表示CPU可以消费的位数或在单个周期中产生。 (这是一个非常简单的解释,但它得到了整个构想)。

在64位计算机(最新的AMD和Intel处理器属于此类别)中,CPU一次进行了优化以一次处理64位值。

因此,在一个32位平台上,将16位整数装入32位地址将需要使16位归零,以便CPU可以在其上进行操作; 32位整数将立即使用而无需任何更改,并且需要在两个或更多的CPU周期中进行64位整数(一次低32位,然后再用于高32位) 。

相反,在一个64位平台上,16位整数需要使48位零,32位整数需要使32位零,并且可以立即操作64位整数。

每个平台和CPU具有“本地”比特度(例如32或64),这通常会限制该CPU可以访问的其他一些资源(例如,32位加工程序的3GB/4GB内存限制)。 80386处理器家族(和后来的X86)处理器制定了32位的规范,但是现在像AMD这样的公司,然后英特尔目前正在制作64位的规范。

其他提示

为了回答您的第一个问题,使用16位的用法与32位与64位整数的使用取决于使用的上下文。因此,您真的不能说一个比另一个更好。但是,根据情况,最好使用一种情况。考虑这个示例。假设您有一个具有1000万用户的数据库,您想存储他们出生的年份。如果您使用64位整数在数据库中创建一个字段,那么您已经用尽了80兆字节的存储空间;鉴于,如果您要使用16位字段,则只能使用20兆字节的存储空间。您可以在这里使用16位的字段,因为人们出生的一年比最大的16位数字小。换句话说,1980,1990,1991 <65535,假设您的领域未签名。总而言之,这取决于上下文。我希望这有帮助。

一个简单的答案是,使用您知道的最小的答案对于它将包含的可能值范围是安全的。

如果您知道可能的值被限制为小于最大长度16位整数(例如,与一年中哪一天相对应的值 - 始终<= 366),则使用它。如果不确定(例如,数据库中表格的记录ID可以具有任何数量的行),则根据您的判断使用INT32或INT64。

其他可能会根据您使用的编程语言更好地了解性能优势,但是较小的类型使用较少的内存,因此如果您不需要更大的话,则可以使用“更好”。

仅供参考,一个16位整数意味着可能有2^16个可能的值 - 通常表示为0到65,535。 32位值可达到2^32或刚刚超过42.9亿个值。

这个问题 在32位CPU上,“整数”类型是否比“短”类型更有效? 可能会添加更多好的信息。

这取决于是否应优化速度或存储。如果您对速度感兴趣,并且正在以64位模式运行SQL Server,则需要64位键。一个以64位模式运行的64位处理器,已优化使用64位数字和地址。同样,在32位模式下运行的64位处理器已优化以使用32位数字和地址。例如,在64位模式下,所有推动和弹出堆栈均为8个字节等。从缓存和内存中获取的64位数字和地址再次优化。以64位模式运行的处理器可能需要更多的机器循环来处理32位数字,就像处理器一样,在32位模式下运行需要更多的机循环才能处理16位数字。处理时间的增加出现是出于多种原因而出现的,但是只需考虑内存对齐的示例:32位数字可能不会在64位积分边界上对齐,这意味着加载数字需要在加载到一个数字后换算并掩盖数字登记。至少,必须在每个操作之前掩盖每32位数字。我们正在谈论至少在64位模式下处理32或16位整数时处理器的有效速度减半。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top