可変性が大きすぎるため、すべての言語、データ型、CPUなどのマスターリストはありません。
一部の言語では、演算子は完全に動的に決定される型ディスパッチ関数呼び出しの構文糖であるため、 "a + b"は数分かかる複雑な関数呼び出しになる可能性がありますが、 "a * b"ミリ秒かかる単純な関数呼び出し、またはその逆。
コンパイル時の型(C++やC++に過負荷があってもC++を含む)を持つ言語では、コンパイル時に何が起きるかを判断することができます。それでもあなたには最終的な答えは与えられません。
"拡張演算子"(+ =など)は、通常、展開後の割り当て操作の短縮形です。実際の操作には同じ時間がかかります。動的型ディスパッチを使用する言語では、補助演算(非演算子)の作業を切断することもあります。これは、拡張操作では変数の型を一度検索するだけで済むからです。静的(コンパイル時)の型付けでは、コンパイラが合理的にスマートである限り、単純なa += b
型の操作では実行時にa = a + b
以上のものを保存することはありません。 p->q->r->s += t
のようなもっと複雑なケースは、(厄介なケースでは)p->q->r->s
の評価が繰り返し書き出される場合には、繰り返し実行する必要があるため、時間を実際に節約することができます。
は、基礎となるCPUの動作については、親指のいくつかのルールがありますが、あなたはどれが適用される確認するために、適切なCPUのマニュアルを上陸する必要があります。
整数、加算、減算、および論理演算のために
- likeおよび/または/ xorは決して他の操作より遅いことはありません
- 整数の場合、乗算は加算よりも「困難」です。つまり、加算などよりも遅いかもしれませんが、十分なCPUがある限り、それ専用のパワー。浮動小数点演算の場合、加算と減算は乗算と除算よりも「難しい」ため、遅くなる可能性があります(または、実際のトランジスタの実数に依存します)。浮動小数点数が整数よりも遅い可能性があります。
- バレルまたはファンネルシフタがある場合、シフトは常に高速ですが、そうでなければシフトに時間がかかることがあります(例えば、x >> 4はx >> 1よりも遅くなる可能性があります)
- 最新のCPUでは、上記の命令スケジューリング@Alexは、命令の順序に依存する場合もあれば、そうでない場合もあります。 、それは助けるかもしれません
- キャッシュ効果(キャッシュ・ライン内の特定のポイントに近いブランチの配置、マルチレベル・キャッシュ・ミス、TLBミスなど)は、効果を完全に揺るがすことができますいくつかのCPUで慎重な命令スケジューリングを行う
これらの種類のものでは、現代のコンパイラ最適化ツールを書くのが面倒です。 :-)
演算子のパフォーマンスは、データ型などによって大きく変わる可能性があります。おそらく、バイナリ算術、浮動小数点計算などを検索することができます。 – joshuahealy