memcpy(3)

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);

memcpy(3)는 src의 n 바이트 데이터를 dest에 복제합니다. memcpy(3)함수는. memcpy는 메모리 복제시에 src와 dest변수의 메모리 영역이 overlap되면 잘못된 데이터가 복제될 수 있습니다. memory 영역에 대한 overlap이 발생할 수 있는 경우에는 memmove(3) 함수를 사용해야 합니다.

 

memory 영역이 overlap된다는 의미는 src 메모리 번지 ~ (src + n - 1 번지) 사이에 dest의 메모리 번지가 위치하는 경우를 말합니다. 이런 경우는 잘 발생하지 않지만, 이런 경우에는 memmove(3)함수를 사용합니다. 그렇다고 항상 memmove(3) 사용한다면 성능이 느려집니다. 이유는 memmove(3)는 내부적으로 메모리를 할당해서 소스를 복사한 다음에 복사본으로 dest에 복사를 하기 때문에 메모리 할당과 해제의 과정이 추가되어 성능이 떨어집니다. 

 

 

파라미터

dest
    - 복제될 메모리 영역(destination / target memory)
    - dest가 NULL이면 비정상적인 동작을 합니다. (coredump)
src
    - 복제할 메모리 영역(source memory)
    - src가 NULL이면 OS마다 다르지만, 비정상적인 동작을 할 수 있습니다.(LINUX는 coredump 발생)
n
    - 복제할 데이터의 바이트수

 

RETURN

dest
    - 복사된 dest pointer를 그대로 return 합니다.

 


활용 예제

 

#incldue <string.h>

    ......

    char data1[100];
    char src[100] = "ABCD";

    memcpy(dest, src, 4);

    ......

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요