使用 GCC -O2 选项编译生成不同的程序

标签 c optimization compiler-construction

我听说 C 编译器有/没有优化选项可能会生成不同的程序(编译有优化的程序会导致它的行为不同),但我从未遇到过这种情况。 任何人都可以举一个简单的例子来说明这一点?

最佳答案

对于 gcc 4.4.4,这与 -O0-O2 不同

void foo(int i) {
  foo(i+1);
}

main() {
  foo(0);
}

通过优化,这个循环永远存在。没有优化,它会崩溃(堆栈溢出!)

其他更现实的变体通常取决于时序,容易受到浮点精度变化的影响,或者取决于未定义的行为(未初始化的变量、堆/堆栈布局)

关于使用 GCC -O2 选项编译生成不同的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422882/

相关文章:

c++ - 在cpp中读取Fortran指数表示法

c - 没有 32Gb 内存限制的 valgrind 替代品?

c - 在 O(log n) 时间内找到连续整数数组中的重复元素

gcc - 使用 gcc 链接到随 Homebrew 安装的动态库?

parsing - 语言分析在现实生活中的应用?

c - 复合/字符串文字存储在内存中的什么位置?

c - 为什么我的以下 C 代码中出现段错误?

mysql - 如何对mysql表进行碎片整理

php - SQL 优化,内部 ? (RBAC)

c++ - LLVM 错误 : Found more than one landing-pad successor