Re: [問題] function memcpy()的疑問^^
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章