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