Re: [問題] function memcpy()的疑問^^

看板C_and_CPP (C/C++)作者時間16年前 (2009/07/27 21:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《WillyLin (我是我 我不是我)》之銘言: : void * memcpy ( void * destination, const void * source, size_t num ); : 是一個很常用的function : 對於連續資料的複製會比自己使用迴圈快不少 : 但是有沒有可能 : 當size_t 在多少以下的時候 : 反而比一行一行寫慢呢? : 例如 mem_addr1, mem_addr2都是char* : memcpy(mem_addr1, mem_addr2, 2); : 和 : mem_addr1[0]=mem_addr2[0]; : mem_addr1[1]=mem_addr2[1]; : 會不會後者較快? 看編譯器和編譯選項, memcpy有可能會變成inline function + inline assembly 不過就算是inline function + inline assembly, 基本上他還是會執行成 movsd + movsb來執行複製 此時, 如果你的資料是簡單的大小(例如說兩個double, 或是兩個int32) 自己複製絕對是比較快的... 省掉if以及rep的運算... 不過如果考量CPU本身cache的特性, 或許效能差距就很小了, 除非你做prefetch的動作 或是CPU已經預先猜到你要去讀那邊了... 無論如何, 當資料很小時, (3~4個變數都算少量的資料), 自己複製應該是比較快的 詳細是幾個變數下會比較快, 可能會跟編譯器/編譯選項以及CPU/記憶體效能有關係 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.36.10
文章代碼(AID): #1ARQcStP (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ARQcStP (C_and_CPP)