gpt4 book ai didi

c - 我在 A* 的 C 实现中正确使用了指针吗?

转载 作者:行者123 更新时间:2023-11-30 18:06:12 24 4
gpt4 key购买 nike

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

代码可用 here

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

  • 节点:这是图的一个顶点,它有坐标和一些与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 结构,或者我完全缺少的其他东西?

最佳答案

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

您是否会在此处看到巨大的性能提升取决于您的系统。

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

关于c - 我在 A* 的 C 实现中正确使用了指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com