作者WPC001 ()
看板C_and_CPP
标题Re: [问题] function memcpy()的疑问^^
时间Mon Jul 27 21:20:27 2009
※ 引述《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