2008年12月10日 星期三

memory copy

最近又看到一篇有趣的文章,如何快速的複製資料:memcpy


那就複製裡面的程式,順便驗證一下是否正確。


首先,先建立2個char的陣列。



my_memcpy複製的副程式,以1個byte來複製。



這是以前的寫法,寫個for回圈,讓陣列test_b = test_a。


這樣需要1208個指令時間



執行my_memcpy副程式


用1個byte複製,需1386個指令時間,似乎沒有比較快。



my_memcpy複製的副程式,以2個byte來複製。



再執行my_memcpy副程式。


用2個byte複製,需要827個指令時間。



my_memcpy複製的副程式,以4個byte來複製。



再執行my_memcpy副程式。


用4個byte複製,需要467個指令時間。



my_memcpy複製的副程式,以8個byte來複製。



再執行my_memcpy副程式。


用4個byte複製,需要287個指令時間。



 


順便比較一下float的陣列。



這是以前的寫法,寫個for回圈,讓陣列test_b = test_a。


這樣需要1688個指令時間



my_memcpy複製的副程式,以1個float,4個byte來複製。


再執行my_memcpy副程式。


用1個float複製,需要1706個指令時間。



my_memcpy複製的副程式,以1個long double,8個byte來複製。



再執行my_memcpy副程式。


用1個long double複製,需要1067個指令時間。




 


結論:用指標的方式,當複製的byte數是一樣的話,執行速度並不會比較快。但如果複製的byte數較高的話,可以省去較多的時間。


1 則留言:

  1. memcpy()是C的標準函式,所以呼叫廠商附的就可以了。說不定比自己寫的快更多。
    [版主回覆12/11/2008 15:18:32]真的快多了,http://tw.myblog.yahoo.com/jw!JvaEZ_.BHk7cTf_bIhxACWlW/article?mid=709
    不過不知道memcpy( ) 不知道可否複製多維陣列。

    回覆刪除