達夫裝置(Duff s Device)

2022-03-14 13:17:20 字數 1005 閱讀 6357

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

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

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

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

我們用達夫裝置計算乙個累加運算,累加很多次,並且與傳統while迴圈進行時間比較。

測試主函式

達夫裝置:

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

測試函式:

傳統方法:

結果:

結果達夫裝置裝置確實縮短了不少時間。。

當然了,達夫裝置還可以用for語句

Duff s Device 達夫裝置

這是個很棒的迂迴迴圈展開法,由 tom duff 在 lucasfilm 時所設計。它的 傳統 形態,是用來複製多個位元組 register n count 7 8 count 0 assumed switch count 8 while n 0 這裡 count 個位元組從 from 指向的陣列複...

達夫裝置 Duff s Device

今天遇到乙個非常詭異的 不多說直接上 void duffdev char to,char from,int count while n 0 void normalcopy char to,char from,int count while count 0 我第一眼看到這個 很懵。不知道是什麼意思。s...

關於達夫裝置(Duff s device)的理解

register n count 7 8 count 0assumed switch count 8 while n 0 剛開始看了半天也沒搞清楚這段 是怎麼執行的,就上網查了查也沒搞很明白,於是就寫了一小 測試了下,總算是弄明白了。這段程式的主體是do while而非switch case,理解這...