0

C をよりよく理解し、iOS 用に構築しているアプリのパフォーマンスを向上させるために、C でパス検索を実装することにしました。

コードはこちらから入手できます

コードでは、次の構造を作成して使用します。

  • ノード: これはグラフの頂点で、座標と A* に関連するその他のデータがあります。
  • NodeGraph: ノードのコレクション
  • NodeHeap: オープン リスト (プライオリティ キュー) に使用されるヒープ

NodeGraph は、ノード メモリの管理を担当します。ノードへのアクセスが必要な他のすべてのものは、NodeGraph 内の特定のノードへのポインターを使用します。たとえば、NodeHeap は次のようなノード ポインターの単なるコレクションです。

// graph is NodeGraph* created elsewhere
Node* n = &(graph->nodes[x][y]);
// heap is a Nodeheap* created elsewhere
heap[0] = n;

ゲーム内では、複数のパス検索呼び出しに同じグラフ構造を使用するつもりです。同じ構造を解放して新しいものにメモリを割り当てるのではなく、同じ構造を再利用することでパフォーマンスが向上することを理解しています。

これは、Cでこのようなことをするべき方法ですか? 私が利用していない C コンストラクトはありますか、それとも完全に欠けているものはありますか?

4

1 に答える 1

0

ほとんどのシステムでは、プロセスが OS と通信する (つまり待機する) 必要があるため、メモリ割り当てにコストがかかります。通常、これは free には当てはまりませんが、OS にメモリを返さず、代わりに保存し、将来の *alloc 関数の呼び出しに優先的に使用します。

ここでパフォーマンスが大幅に向上するかどうかは、システムによって異なります。

最適化を行わずにコードを記述し、プロファイラー (gprof など) を使用して最も多くの時間を費やしている場所を確認することをお勧めします。その後、それに応じてコードを最適化できます。

于 2011-05-18T19:45:35.230 に答える