对不同数据类型的操作

时间:2009-12-09 04:28:07

标签: java c++ c

在任何标准语言C / C ++,Java等中考虑基本数据类型,如char,int,float,double等。

是否有类似的东西......“对整数进行操作比对字符操作要快”..通过操作我的意思是赋值,算术运算/比较等。 数据类型是否比较慢?

6 个答案:

答案 0 :(得分:5)

对于你所做的几乎任何事情,这几乎没有任何影响,但纯粹出于信息目的,通常使用大小为机器字大小的数据类型(即x86上的32位)最快和amd64上的64位)。此外,SSE / MMX指令也可以为您提供好处,如果您可以将这些指令分组并同时处理它们

答案 1 :(得分:5)

此规则有点像英语拼写和/或语法规则。这些规则至少在遵循规则的情况下被打破。

例如,多年来“每个人都知道”浮点运算比整数慢,特别是对于更复杂的运算,如乘法和除法。实际上,一些处理器通过将操作数转换为浮点,在浮点上执行操作,然后将结果转换回整数来执行一些整数运算(尤其是乘法和除法)。正如您所期望的那样,浮点运算实际上更快(尽管只是一点点)。

然而,大多数时候,它并不重要 - 在很多情况下,将处理器本身的操作视为免费是非常合理的,并且主要关注优化带宽的使用记忆。当然,做得好往往更难......

答案 2 :(得分:2)

是的,有些数据类型肯定比其他数据类型慢。例如,浮点数比int更复杂,因此在进行除法和乘法运算时可能会产生额外的惩罚。这完全取决于您的硬件设置方式以及它支持的指令类型。

长于机器字大小的数据类型也会变慢,因为执行操作需要更多周期。

答案 3 :(得分:1)

取决于你做什么,差异可能非常大,特别是在使用花车而不是双倍与长双倍时。

在现代处理器中,它归结为simd指令,它具有一定的长度,最常见的是128位。所以四个浮动对两个双数。

然而,有些处理器只有32位simd指令(PPC),而GPU硬件在float和double之间的性能差异为8倍。

当你将三角函数,指数函数和平方根函数添加到混合函数中时,浮点数将在给定的因子数量下具有更好的性能。

答案 4 :(得分:1)

此页面上几乎所有答案都是正确的。但是,答案取决于您的硬件,语言,编译器和VM(在Java等托管语言中)狂野。在大多数CPU上,最佳性能是对适合CPU本机操作数大小的数据类型执行操作。但是,在某些情况下,某些编译器会为您优化。

在大多数现代桌面CPU 上,浮点和整数运算之间的差异变得非常微不足道。但是,在较旧的硬件和许多嵌入式系统上,所有这些因素的差异仍然非常大。

重要的是要了解目标架构和工具的具体细节。

答案 5 :(得分:0)

这个答案与Java案例有关​​(仅限)。

字面答案是基元类型和运算符的相对速度取决于处理器硬件和JVM实现。

但更好的答案是,它通常不会对您使用的表现产生很大的影响。实际上,为了使代码在当前机器/ JVM上快速运行,您所做的任何聪明的数据类型优化都可能会在不同的机器/ JVM组合上进行反优化。

通常,最好选择一种以正确和自然的方式表示数据的数据类型,并将其留给编译器来整理细节。但是,如果要创建基本类型的大型数组,则值得知道Java对布尔,字节和短数组使用紧凑表示。

相关问题