C"静态"优化

1 c optimization static

我正在读关于优化teckniks的书.但是在示例中没有太多描述或建议.这是事情:

int agag(int a)
{
  static int dfdfdf = 0;
  static int prev_resilt = 0;
  if (dfdfdf == a)
    return prev_result;
  dfdfdf = a;
  a = SomeCalcs();
  prev_result = a;
  return a;
}
Run Code Online (Sandbox Code Playgroud)

关键是:如果参数与先前的计算相同,它将立即返回先前的结果,避免进行硬计算.问题是:这两个静态变量会在程序结束之前存在吗?据我了解,拥有很多这些是件坏事?

我知道这不是很多优化.但我只关心静态变量的影响..

非常感谢你的答案!

Ign*_*ams 8

静态变量使用的内存将分配在数据段中而不是堆或堆栈中.当您拥有大量静态变量时,这只会成为一个问题,因为这意味着可执行文件必须从磁盘加载更大的数据段.

但这种方法的最大问题是它只存储一个值.如果您希望使用相同的输入重复多次重复,那么最好只执行适当的memoization.


Oli*_*rth 8

是的,static变量的生命周期一直持续到程序结束.

但是,这样做会为您的函数添加状态.这使得它非线程安全,更难调试,更难以测试.这些通常被认为是坏事.