由于我从未接受过计算机科学的“正规”教育(我在高中),所以我一直想知道这个问题,所以请原谅我对这个问题的无知。
在支持标题中列出的三种整数的平台上,哪个更好,为什么?(我知道每种类型的 int 在内存中都有不同的长度,但我不确定这意味着什么或它如何影响性能,或者从开发人员的角度来看,哪一种比另一种更具优势)。
预先感谢您的帮助。
“更好”是一个主观术语,但某些整数在某些平台上性能更高。
例如,在 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 可以访问的一些其他资源(例如,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 位值的范围从 0 到 2^32 - 1,即超过 42.9 亿个值。
这个问题在 32 位 CPU 上,“整数”类型是否比“短”类型更有效?可能会添加一些更好的信息。
It depends on whether speed or storage should be optimized. If you are interested in speed and you are running SQL Server in 64 bit mode then 64 bit keys are what you need. A 64 bit processor running in 64 bit mode, is optimized to use 64 bit numbers and addresses. Likewise, a 64 bit processor running in 32 bit mode is optimized to use 32 bit numbers and addresses. For example, in 64 bit mode, all pushes and pops onto the stack are 8 bytes etc. Also fetch from cache and memory are again optimized for 64 bit numbers and addresses. The processor, running in 64 bit mode, may need more machine cycles to handle a 32 bit number just like a processor, running in 32 bit mode needs more machine cycles to handle a 16 bit number. The increases in processing time come for many reasons, but just think about the example of memory alignment: The 32 bit number may not be aligned on a 64 bit integral boundary which means loading the number requires shifting and masking the number after loading it into a register. At the very least, every 32 bit number must be masked before each operation. We are talking at least halving the processor's effective speed while handling 32 or 16 bit integers in 64 bit mode.
给新手程序员提供一个简单的解释。位是 0 或 1。
将这些概念带回家的示例:
您可以用 64 位表示比 32 位比 16 位更多的整数。因此,使用更少位的好处是可以节省机器空间。使用更多位的好处是可以表示更多整数。