【问题标题】:Is it legal for a C compiler to optimize out local static variables?C编译器优化局部静态变量是否合法?
【发布时间】:2017-03-29 21:51:45
【问题描述】:

对于像这样的功能

int test(void) {
  static int x = 0;
  x++;
  return 0;
}

是否允许 C 编译器优化 x

作为参考,GCC 6.3.0 或 Clang 3.9 都没有优化使用 -O3 递增 x

【问题讨论】:

  • 喜欢.. 为什么不呢?
  • 即使启用了优化?
  • 那么,可观察的行为发生了什么变化?
  • C 标准没有什么可说的,例如符号表,因为它们是实现细节。但是,x 的作用域只是那个函数。
  • @yellowantphil - 编译器可以假设未定义的行为永远不会发生。众所周知,gcc 会根据该假设进行优化。

标签: c static local compiler-optimization


【解决方案1】:

编译器有权完全优化掉这个函数,因为它没有明显的副作用(从 C 标准的角度来看)。

至于为什么您的编译器不这样做,我无法解释! (当然,他们没有义务这样做。)

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多