0

为了更好地理解 C 并尝试提高我为 iOS 构建的应用程序的性能,我决定在 C 中实现路径查找。

代码可在此处获得

在代码中,我创建并使用了以下结构:

  • 节点:这是图的一个顶点,它有坐标和一些与 A* 相关的其他数据
  • NodeGraph:节点的集合
  • NodeHeap:用于打开列表(优先队列)的堆

NodeGraph 负责管理节点内存;需要访问该节点的所有其他内容都使用指向 NodeGraph 中特定节点的指针。例如,NodeHeap 只是 Node 指针的集合,例如:

// 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

在大多数系统上,内存分配很昂贵,因为您的进程必须与操作系统通信(并因此等待)。但是,通常情况下,免费的情况并非如此,它不会将内存返回给操作系统,而是为您存储它,并优先将其用于将来对 *alloc 函数的调用。

您是否会在这里看到很大的性能提升取决于您的系统。

我建议在不进行优化的情况下编写代码,然后使用分析器(例如 gprof)来查看您花费最多时间的地方。然后,您可以相应地优化您的代码。

于 2011-05-18T19:45:35.230 回答