C & C++

[C] memcpy와 memmove의 차이

  • -
728x90

memcpy와 memmove 두 함수는 모두 특정 메모리를 다른 메모리로 복사할 때 사용된다. 그렇다면 두 함수의 차이는 뭘까?

memcpy

void *memcpy(void *dest, void *src, size_t size);

dest(destination) : 복사되는 메모리의 주소

src(source) : 복사하는 메모리의 주소

size : 복사할 크기

return : 성공시 dest, 실패시 NULL

memmove

void *memmove(void *dest, void *src, size_t size);

dest(destination) : 복사되는 메모리의 주소

src(source) : 복사하는 메모리의 주소

size : 복사할 크기

return : 성공시 dest, 실패시 NULL

 

 

위와 같이 함수 이름을 제외하곤 차이점이 없어보인다. 그렇다면 왜 두개의 함수가 존재할까?

memcpy는 메모리의 내용을 직접 copy하고, memmove는 메모리의 내용을 임시저장소에 저장한 후 복사한다.

따라서 memcpy의 속도는 memmove보다 빠르지만 안정성면에서 떨어진다.

memory를 복사할 때 memcpy의 경우에는 자기 자신의 내용을 복사하여 덮어쓸 때, 인접한 메모리에 의해 겹침현상(overlap)이 일어난다.

듣기로는 최근에는 overlap 현상을 c컴파일러 자체에서? 처리해준다는 말을 들은 것 같다. 외국 문서를 통해 좀 더 자세히 찾아봐야겠다.

728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.