構造体の変数を代入とmemcpyでどちらが早か調べる
今回のテストは環境に依存すると思うので参考までにspecを載せておく
AMD Athlon(tm) 64 Processor 3200+ DDR 515992kB
#include <stdio.h> #include <string.h> #include <time.h> #include <sys/time.h> struct mydata { char buf[68]; }; long gettimeofday_sec() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_usec; } int main() { struct mydata d1; struct mydata d2; long start; start = gettimeofday_sec(); d2 = d1; printf("d2 = d1, %dusec\n", (gettimeofday_sec() - start)); start = gettimeofday_sec(); memcpy(&d2, &d1, sizeof(struct mydata)); printf("memcpy, %dusec\n", (gettimeofday_sec() - start)); return (0); }
$ gcc -o memtest memtest.c -g $ ./memtest d2 = d1, 5usec memcpy, 2usec
どうやら私の環境では64byteぐらいからmemcpyの方が早くなるようである