memcpy:yundreamÀÇ ´ä
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

void *·Î ¹ÞÀº´ÙÀ½ size¸¸Å­ ·çÇÁ¸¦ µ¹¸é¼­ src¿¡¼­ dst·Î º¹»çÇϵµ·Ï Çß½À´Ï´Ù. 1byte°¡ ¾Æ´Ñ 4byte¾¿ º¹»çÇϵµ·Ï Çß½À´Ï´Ù.
#include <stdio.h> 
#include <string.h> 
#include <time.h> 
 
mymemcpy(void *dst, void *src, unsigned int size) 
{ 
  int i; 
  char *a = (char *)src; 
  int pad = size%sizeof(int); 
  for(i = 0; i < size/sizeof(int); i++) 
  { 
    *(int *)dst = *(int *)src; 
    dst +=4; 
    src +=4; 
  } 
  for (i = 0; i < pad; i++) 
  { 
    *(char *)dst = *(char *)src; 
    dst++; 
    src++; 
  } 
} 
 
struct data 
{ 
  int age; 
  char name[24]; 
  char a; 
}; 
int main(int argc, char **argv) 
{ 
  int i = 0; 
  struct data src, dst; 
  clock_t stime, etime; 
 
  memset((void *)&dst, 0x00, sizeof(src)); 
  src.age = 10; 
  src.a = 'a'; 
  sprintf(src.name, "%s", "yundream"); 
 
  stime = clock(); 
  for (i = 0; i < 10000000; i++) 
  { 
    mymemcpy((void *)&dst, (void *)&src, sizeof(src)); 
  } 
  etime = clock(); 
  printf("Time : %.3fs\n",(double)(etime - stime)/CLOCKS_PER_SEC); 
  printf("%d\n", dst.age); 
  printf("%c\n", dst.a); 
  printf("%s\n", dst.name); 
} 
 
´ÙÀ½Àº Å×½ºÆ® °á°ú ÀÔ´Ï´Ù.
$ ./mymemcpy 
Time : 0.460s 
10 
a 
yundream 
 
4byte¾¿ ÇÏÁö ¾Ê°í 1byte¾¿ º¹»çÇÒ°æ¿ì ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©Áá½À´Ï´Ù.
$ ./mymemcpy 
Time : 1.450s 
10 
a 
yundream 
 
long long·Î Çüº¯È¯Çؼ­ 8byte¾¿ º¹»çÇÒ°æ¿ì ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©Áá½À´Ï´Ù.
$ ./mymemcpy 
Time : 0.260s 
10 
a 
yundream 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.