話說noip不開優化,那咱們來看看開優化後會發生什麼ios
一個簡單的累加app
#include<cstdio> #include<ctime> //計時看看差異 #include<iostream> using namespace std; int main() { int n=1000000000; int tn=n/2; clock_t a,b; a=clock(); int sum=0; //通常的累加 for(int i=0;i<=n;i++) sum+=i; printf("%d\n",b=clock()-a);//用時1 int sum1=0,sum2=0; //神奇的累加 循環展開+多路並行 for(int i=0;i<=tn;i++) sum+=i<<1,sum+=i<<1&1; printf("%d",clock()-b);//用時2 return 0; }
按理來講,上面的兩種方法差很少(???)工具
在DEVC++ 5.7.1中,xp系統(學校機房的那種)優化
不開任何優化 大約前一種是8500ms+,後一種是4000ms+spa
開-O1 1300ms+ 600ms+ //優化級別 lowcode
開-O2 以上 0 0 //low以上blog
怎麼回事呢?ip
這個快一倍的緣由在csapp第五章是有的,get
緣由是cpu整數加法運算器有多個,編譯器
而同一個時間能夠最多運算兩個整數加法,
經過這種方法能夠增長流水線吞吐量。
實際上,編譯器會在第二次隱式彙編優化時候作這個優化,
若是你把gcc開到o3以上的優化程度就能夠自動在彙編指令層級變成這種形式
咋開優化?
DEVC++工具欄-》工具-》編譯選項-》編譯器-》編譯時加入如下命令-》鍵入-O2-》
-》代碼生成優化-》代碼生成-》優化級別
noip2017 rp++