C++运算符的性能

RED*_*ce0 5 c++ performance operators

c ++中的算术运算符之间是否存在任何性能差异,还是它们都运行速度相同?例如,"++"比"+ = 1"快吗?那么"+ = 10000"呢?如果数字是浮点数而不是整数,它会产生显着差异吗?"*"明显比"+"长吗?

我尝试每次执行10亿"++","+ = 1"和"+ = 10000".奇怪的是,时钟周期数(根据time.h)实际上是违反直觉的.人们可能会认为,如果它们中的任何一个是最快的,则为"++",然后是"+ = 1",然后是"+ = 10000",但数据显示相反方向的轻微趋势.100亿次运营的差异更为明显.这都是整数.

我正在涉足科学计算,所以我想测试运营商的表现.例如,如果任何操作员及时操作在输入方面是线性的.

GMa*_*ckG 12

关于您的编辑,该语言没有说明它正在运行的架构.您的问题取决于平台.

也就是说,通常所有基本数据类型的操作都与汇编具有一对一的对应关系.

例如,x86具有将值递增1的指令,该指令将转换为i++i += 1将转换为.加法和乘法也有单个指令.

硬件方面,很明显,数字的位数增加或相乘至少是线性的.因为硬件具有恒定的位数,所以它是O(1).

浮子通常有自己的处理单元,也有单独的操作说明.


有关系吗?

为什么不编写执行您需要它的代码.如果要添加一个,请使用++.如果要添加大量数字,请添加大量数字.如果您需要浮子,请使用浮子.如果你需要乘以两个数字,那么乘以它们.

编译器将找出做你想做的最好的方法,所以不要试图变得棘手,做你需要的东西,让它做艰苦的工作.

你写你的工作代码后,你决定它的速度太慢,配置文件,并找出原因.你会发现这不是愚蠢的事情,比如乘法与增加,而是以错误的方式解决整个(子)问题.

实际上,您列出的所有运算符无论如何都将在桌面平台上的单个CPU指令中完成.

  • 实际上,我对这种势利主义有点厌倦,首先是"它有关系吗?","为什么是noy ......".为什么不简单地告诉他你是否知道这些比较的页面,因为他很好奇,否则就会闭嘴? (6认同)
  • OP永远不会陈述/为什么/ - 只是问这个问题.看起来有点像你假设最终是微优化,这可能根本不是这样. (3认同)
  • 当然,无论你是做'++ i`还是`i + = 1`都没关系.我们知道.但OP没有.这就是他问的原因.我知道在编程时我能够忽略这些性能问题的唯一原因是因为我已经掌握了必要的知识来确定"这并不重要".所以是的,对于OP来说它确实很重要.他需要一些答案才能让他不必担心. (2认同)

Pas*_*uoq 6

不,不,是*,是*,分别.

*但你真的在乎吗?

编辑:为了给现代处理器提供一些想法,你可以在进行一次内存访问所需的时间内完成200个整数加法,并且只能进行50次整数乘法.如果你考虑一下,你仍然会在大多数时候受到内存访问的约束.