達夫設備(Duff's Device)


 達夫設備設備是一段非常巧妙,看起來非常詭異的c代碼,它可以很大的提高程序執行的效率(本文將試驗),達夫設備的來源我就不說了,我們來分析一下。

 

  達夫設備是考慮到我們一般用for或者while循環的時候,如果執行循環內容本身用不了多少時間,那么時間將被主要消耗在每次循環的比較語句上邊。

  事實上比較語句是有很大優化空間的,假設你要循環1000次,結果你從第一次開始就不斷的比較是否達到上界,這是很徒勞的。

 

  達夫這個哥們利用了switch語句的跌落行為設計了達夫設備。

 

  我們用達夫設備計算一個累加運算,累加很多次,並且與傳統while循環進行時間比較。

 

測試主函數

  

 

 

達夫設備:

  執行時間:

它的執行時間是0.496s。  這里需要注意,x的定義是要用register關鍵字,這樣cpu就會把x盡可能存入cpu內部的寄存器,但是不是百分之百會存進寄存器,因為計算機通用寄存器就那么一二十個(現在64新的cpu我也不知道有多少個,但是肯定很少),所以cpu也只是盡可能的給你把x放進寄存器而已。

 

現在我們看一下傳統的循環的執行時間:

測試函數:

傳統方法:

結果:

 結果達夫設備設備確實縮短了不少時間。。

 

 

當然了,達夫設備還可以用for語句


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM