gcc 編譯器與 clang 編譯器
今天上午,盧濤在圖靈社群發表了一篇文章:尤拉計劃30題(加強版)。我把他的第二個程式稍做修改:
1: #include <stdio.h>
2:
3: static int a[1000], size;
4:
5: int sum(int n)
6: {
7: int z = 0;
8: for (; n > 0; n /= 10) {
9: int i = n % 10;
10: z += i*i*i*i*i*i*i*i*i;
11: }
12: return z;
13: }
14:
15: int sum2(int n)
16: {
17: static int t = 0;
18: int m = n % size;
19: return (m != 0) ? (t + a[m]) : (t = sum(n));
20: }
21:
22: int main()
23: {
24: printf("Start\n"); fflush(stdout);
25: size = sizeof(a) / sizeof(a[0]); int z = 0;
26: for(int i = 1; i < size; i++) a[i] = sum(i);
27: for(int i = 2; i <= (int)1e9; i++) {
28: if (sum2(i) != i) continue;
29: printf("%d\n", i); fflush(stdout);
30: z += i;
31: }
32: printf("[%d]\n", z); fflush(stdout);
33: return 0;
34: }
然後,分別使用 gcc 和 clang 編譯,執行結果如下:
為什麼 gcc 編譯器編譯出來的程式比 clang 慢這麼多?這兩個編譯器的版本:
Euler$ gcc --version
gcc (GCC) 6.2.1 20160830
Copyright © 2016 Free Software Foundation, Inc.
本程式是自由軟體;請參看原始碼的版權宣告。本軟體沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
Euler$
Euler$ clang --version
clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
相關文章
- NDK clang編譯器的一個bug編譯
- GCC編譯器背後的故事GC編譯
- (Xcode) 編譯器小白筆記 – LLVM前端ClangXCode編譯筆記LVM前端
- (Xcode) 編譯器小白筆記 - LLVM前端ClangXCode編譯筆記LVM前端
- 探索gcc編譯最佳化細節 編譯器最佳化gcc -o3GC編譯
- VS設定 LLVM-Clang 編譯器進行編譯C++專案LVM編譯C++
- clang++編譯命令編譯
- 淺談彙編器、編譯器和直譯器編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- 原創 【CentOS Linux 7】實驗4【gcc編譯器】CentOSLinuxGC編譯
- Linux中gcc編譯工具LinuxGC編譯
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- Go編譯器簡介【譯】Go編譯
- Ubuntu 19.10將使用GCC 9作為預設編譯器UbuntuGC編譯
- linux 改變GCC編譯器的位元組對齊方式LinuxGC編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 編譯器的自展和自舉、交叉編譯編譯
- CSS預編譯器CSS編譯
- 記一起由 Clang 編譯器優化觸發的 Crash編譯優化
- Java編譯與反編譯Java編譯
- GCC編譯和連結過程GC編譯
- 記一起由 Clang 編譯器最佳化觸發的 Crash編譯
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- 說說 方舟編譯器編譯
- stylus(css預編譯器)CSS編譯
- ARM 之主流編譯器編譯
- Rust 編譯器入門Rust編譯
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯
- 記錄一次gcc的編譯GC編譯
- Numba編譯器的介紹與應用編譯
- 前端與編譯原理——用JS寫一個JS直譯器前端編譯原理JS
- 前端與編譯原理——用 JS 寫一個 JS 直譯器前端編譯原理JS
- NEO Python編譯器介紹Python編譯
- Lombok編譯器Maven外掛Lombok編譯Maven
- C++編譯器優化C++編譯優化
- JIT 編譯器快速入門編譯
- JS 編譯器都做了啥?JS編譯
- 編譯器後端總結編譯後端