達夫設備設備是一段非常巧妙,看起來非常詭異的c代碼,它可以很大的提高程序執行的效率(本文將試驗),達夫設備的來源我就不說了,我們來分析一下。
達夫設備是考慮到我們一般用for或者while循環的時候,如果執行循環內容本身用不了多少時間,那么時間將被主要消耗在每次循環的比較語句上邊。
事實上比較語句是有很大優化空間的,假設你要循環1000次,結果你從第一次開始就不斷的比較是否達到上界,這是很徒勞的。
達夫這個哥們利用了switch語句的跌落行為設計了達夫設備。
我們用達夫設備計算一個累加運算,累加很多次,並且與傳統while循環進行時間比較。
測試主函數
達夫設備:
執行時間:
它的執行時間是0.496s。 這里需要注意,x的定義是要用register關鍵字,這樣cpu就會把x盡可能存入cpu內部的寄存器,但是不是百分之百會存進寄存器,因為計算機通用寄存器就那么一二十個(現在64新的cpu我也不知道有多少個,但是肯定很少),所以cpu也只是盡可能的給你把x放進寄存器而已。
現在我們看一下傳統的循環的執行時間:
測試函數:
傳統方法:
結果:
結果達夫設備設備確實縮短了不少時間。。
當然了,達夫設備還可以用for語句