-2

PC、Xbox、または PS3 向けにリリースされたほとんどすべての AAA ビデオ ゲームが完全に C++ で記述されていることは、今日の事実です。一部のベンダーは、内部で再利用するさまざまなエンジンの大規模なコードベースが既に C++ (物理、レンダリングなど) でビルドおよびテストされているため、C# に移行できないと述べています。また、パフォーマンスに関しては、 C++ コードが C# よりも高速に実行されるという一般的に受け入れられている事実です。

繰り返しますが、プロのゲーム開発業界が一般的に C++ を使用するのはなぜですか? 一般的な基幹業務アプリケーションは「得られる最高のパフォーマンス」を必要とせず、パフォーマンスと引き換えに信頼性 (メモリ リーク、OOB、スタック オーバーフロー) が「重要ではない」ためでしょうか? それとも、C# で記述された同じコードよりも、C++ の方が一般的に "保守が難しい" (テンプレート、ポインター、malloc など) という理由だけですか?

それとも、C++ での開発は C# で同じ機能セットを開発するよりも「時間がかかる」ため、必要なだけ多くの機能を実装できないためですか? しかし、今日でも、 UDKCryENGINEなどの多くのハイエンド ゲーム開発キットは完全に C++ で記述されており、その機能セットはどのプラットフォームでも最高のものです。では、C++ がそのような企業にとって「難しい」、「制限する」、または「バグが多い」ものではないのであれば、ゲーム開発業界や科学/HPC 業界以外で C++ がほとんど使用されていないのはなぜでしょうか?

4

3 に答える 3

8

それは主に言語ではなく、プラットフォームです。

.Net では SSE を使用できません。GPU を使用する能力は制限されています。一部のロックフリー マルチスレッド アルゴリズムは、ネイティブ コードで本来の意図 (バージョン管理されたポインター) でのみ実際に実装できます (マルチスレッドが重要な場合は、効率的なロックフリー構造によって速度が大幅に向上します)。メモリ管理は .Net では自動ですが、高パフォーマンスのシナリオでは、メモリをマイクロ管理 (オブジェクト タイプごとに個別のミニヒープ) することで速度を大幅に向上させることができます。また、メモリを介してベクトル化することもできます。多くの場合、複数のポインターが大きなバッファーを介してベクトル化し、値を SSE 操作にフィードします。

ほんの数例を挙げると。

これらのことは、通常、ビジネス アプリ自体は気にしないものです。なぜなら、このレベルでパフォーマンスが本当に重要である場合、それが実行されているサーバーである可能性が高いからです ~(デスクトップ アプリはほとんどありません - 取引のシナリオであっても、サーバーである可能性が高いです)リアルタイムである必要があります)、そのパフォーマンスを必要とするビジネスは、より高速なマシンを使用するだけです。またはブレードセンター。

小売ゲーム環境では、ハードウェアのさまざまな構成で動作する必要があるため、ユーザーが実行しているハードウェアのパフォーマンスを最後の一滴まで絞り出すことは理にかなっています。

ビジネスで .Net が普及している理由よりも、ほとんどのゲームのコーディングに C++ が使用されている理由については、もっと多くの答えがあると思います。話し中)。しかし、それ以上の要因があります。

ただし、ある意味では、リンゴを牛に例えるようなものです。問題に最適な技術を選択します。

于 2012-10-25T07:40:46.327 に答える
5

アプリケーションのボトルネックを常に最適化する必要があります。

ゲームでは、エンジンの速度がアプリケーションのパフォーマンスにとって重要です。したがって、最適化はそこで理にかなっています。

データベースクエリの実行を待機するために X ミリ秒を費やし、ユーザーインターフェイスを描画して実際の「ビジネスコード」を実行するために Y << X ミリ秒を費やす基幹業務アプリケーションでは、Y を最適化することは意味がありませ。ここでは X が重要な要素であるため、通常 C、C++、またはその他の「高性能」言語で記述されているのはデータベース エンジンです。

于 2012-10-25T07:39:52.407 に答える
4

簡単に言うと、C または C++ を使用すると、低レベルでより多くの詳細を操作できるようになるため、可能な限りパフォーマンスとメモリを向上させることができます。これは、ゲームが描画と描画にかなり高いパフォーマンス要件を必要とするため、実際に必要です。継続的に物事を再描画します。

ただし、そのような詳細は一般的にビジネス ライン アプリでは必要ありません。まず第一に、集中的な作業を必要とする多くの「操作」を実行しないため、管理されたコードを使用できるため、物理的なワークロードの原因となる特定のペナルティが与えられますが、マネージド コードを使用できます。より低いです。したがって、ポイントは、適切な仕事に適切なツールを使用することです。農業をするのにスクーターを使う必要はありませんし、ピザを配達するのにトラクターは必要ありません。

于 2012-10-25T07:39:28.123 に答える