1. ホーム
  2. c#

[解決済み】C++はC#よりどのくらい速いのか?

2022-04-19 11:12:55

質問

それとも、今は逆なのでしょうか?

聞くところによると、C#の方がC++より速い部分もあるらしいのですが、自分でテストする勇気がないんです。

この違いについて詳しく説明していただける方、または正しい情報を提供していただける方がいらっしゃいましたら教えてください。

解決方法は?

C#やJavaのようなバイトコードベースの言語でJITがある場合、C++コードと同等の速度が出せないという厳密な理由はありません。しかし、C++のコードは長い間、かなり高速でしたし、現在でも多くの場合、高速です。これは主に、より高度なJIT最適化の実装が複雑であるためで、本当にクールな最適化は今ようやく登場したところです。

だからC++の方が速いんです、多くの場合。しかし、これは答えの一部に過ぎません。C++が実際に速いのは、高度に最適化されたプログラムであり、専門のプログラマーがコードの地獄を徹底的に最適化した場合である。これは非常に時間がかかる(つまりコストがかかる)だけでなく、過剰な最適化によってエラーが発生することもよくあることだ。

一方、インタープリタ型言語のコードは、ランタイム(.NET CLRやJava VM)の後のバージョンでは、何もしなくても高速化されます。また、JITコンパイラには、ポインターを使う言語では不可能な、便利な最適化がたくさんあります。また、ガベージコレクションは一般に手動メモリ管理と同等かそれ以上に高速であるべきだと主張する人もいますが、多くの場合そうなっています。一般に、C++やC言語でもこれらすべてを実装して実現することは可能ですが、より複雑でエラーが発生しやすいものになるでしょう。

ドナルド・クヌースが言ったように、「時期尚早の最適化は諸悪の根源」なのです。もし、あなたのアプリケーションのほとんどが非常にパフォーマンスクリティカルな演算で構成されていて、それがボトルネックになり、C++の方が確実に速くなり、C++が他の要件と衝突しないことが確実なら、C++を選ぶとよいでしょう。それ以外の場合は、まず自分に最も適した言語でアプリケーションを正しく実装することに集中し、次に動作が遅すぎる場合にパフォーマンスのボトルネックを見つけ、コードを最適化する方法を考えます。最悪の場合、外部関数インターフェースを通じてC言語のコードを呼び出す必要があるかもしれないので、重要な部分を低レベルの言語で書く能力は残っているはずです。

正しいプログラムを最適化するのは比較的簡単ですが、最適化されたプログラムを修正するのはずっと難しいということを心に留めておいてください。

実際に何パーセントの速度が優れているかを示すことは不可能で、それはコードに大きく依存します。多くの場合、プログラミング言語の実装がボトルネックになっているわけではありません。たとえば、次のようなベンチマークがあります。 http://benchmarksgame.alioth.debian.org/ というのも、これらは主に演算コードをテストしており、あなたのコードとは全く似ていない可能性が高いからです。