小编Pet*_*ter的帖子

使用全局变量的递归函数中的GCC优化差异

前几天我遇到了一个使用GCC和'-Ofast'优化标志的奇怪问题.使用'gcc -Ofast -o fib1 fib1.c'编译以下程序.

#include <stdio.h>

int f1(int n) {
    if (n < 2) {
        return n;
    }
    int a, b;
    a = f1(n - 1);
    b = f1(n - 2);
    return a + b;
}

int main(){
    printf("%d", f1(40));
}
Run Code Online (Sandbox Code Playgroud)

在测量执行时间时,结果是:

peter@host ~ $ time ./fib1
102334155
real    0m0.511s
user    0m0.510s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

现在让我们在程序中引入一个全局变量,然后使用'gcc -Ofast -o fib2 fib2.c'再次编译.

#include <stdio.h>

int global;

int f1(int n) {
    if (n < 2) {
        return n;
    }
    int a, b;
    a …
Run Code Online (Sandbox Code Playgroud)

c gcc

7
推荐指数
1
解决办法
150
查看次数

标签 统计

c ×1

gcc ×1