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指令中完成.
不,不,是*,是*,分别.
*但你真的在乎吗?
编辑:为了给现代处理器提供一些想法,你可以在进行一次内存访问所需的时间内完成200个整数加法,并且只能进行50次整数乘法.如果你考虑一下,你仍然会在大多数时候受到内存访问的约束.