C:访问全局变量或将指针传递给函数更快

时间:2010-10-16 11:32:48

标签: c variables pointers global

我目前正在重写我的一个程序。它具有很强的递归功能,可以解决peg-solitaire:

int solve(int draw) {
  if (finished())
    return true;

  //loop over every possible move (about 76 long values)
  //do a move (access the board, which is a long value)
  if (solve(draw + 1))
    return true;

  return false;
}

所以我想知道使用这样的解决方案是否更快:

solve(int draw, long **moves, long *board) {}

目前,移动和董事会都是全局变量。

当然我要测试它,但如果有人告诉我这次尝试不会有效,我会节省一些时间:)。

最好的问候

4 个答案:

答案 0 :(得分:9)

它可能效率不高,但唯一可以确定的方法是分析您的代码。如果大部分执行时间都花在了实际的游戏逻辑上,那么在堆栈上放置一些参数的微小开销应该可以忽略不计。

但是,从设计的角度来看,避免全局变量要好得多。它允许您的代码无状态,因此可能具有重入性和线程安全性。但是,这可能与您的申请相关,也可能不相关。

答案 1 :(得分:3)

我认为这不是性能瓶颈。

使用您显示的代码,我唯一想到的是:

你需要很长的变量吗?它们通常需要更多空间,这意味着有更多时间使用它们。我记得有一次我用浮点变量替换了双变量,我获得了大幅提升(执行时间缩短了50%)。这可能有点帮助:)

答案 2 :(得分:2)

这看起来好像太快了!

每次调用solve()时,都必须检查是否已完成()。完成()检查的成本将消除可变访问时间的任何差异。

首先纠正它,然后如果它太慢则对其进行分析,然后进行优化!

答案 3 :(得分:1)

将参数传递给函数有一定的开销 - 将参数写入堆栈。 在大多数(可能是全部)现代架构中,堆栈访问和全局数据访问具有相同的速度,因此最有可能传递参数的速度会慢一些。