小编Mit*_*101的帖子

为什么GCC没有优化对printf的调用?

#include <stdio.h>
int main(void) { 
    int i;
    scanf("%d", &i);
    if(i != 30) { return(0); } 
    printf("i is equal to %d\n", i);
}
Run Code Online (Sandbox Code Playgroud)

看来结果字符串将始终以"i等于30",那么,为什么不GCC优化此调用与一个调用printf puts(),或者write(),例如?

(刚刚检查了生成的程序集,使用gcc -O3(版本5.3.1),或者在Godbolt Compiler Explorer上)

c assembly printf gcc compiler-optimization

14
推荐指数
2
解决办法
980
查看次数

在整数数组中找到最大的对

如何在大小为n的正整数数组中找到最大的对,但是整数至少在距离k?(例如,如果第一个元素是[i],那么第二个元素应该是[i + k](或更多).)

我试过这个:

int max_sum = 0;
int sum;
for (int i = 0 ; i < n; i++) {
    for( int j = i + k; j < n; j++) {
        sum = arr_sums[i] + arr_sums[j];
        if ( sum > max_sum ) {
            max_sum = sum;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于大型阵列来说太慢了.

c arrays algorithm performance

5
推荐指数
1
解决办法
1058
查看次数