前几天我遇到了一个使用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)