- memcpy는 메모리의 내용을 직접 copy하고, memmove는 메모리의 내용을 임시저장소에 저장한 후에 복사한다.
- memcpy는 dest와 src의 메모리 영역이 겹쳐선 안된다.
- dest와 src의 메모리 영역이 겹칠 땐 memmove를 사용해야 한다.
memcpy
void *memcpy(void *restrict dest, const void *restrict src, size_t n);
- src의 주소값에서 n개의 바이트를 하나 씩 복사한다.
memmove
void *memmove(void *dest, const void *src, size_t n);
- dest와 src의 메모리 영역이 겹쳐도 괜찮다.
- src의 바이트들을 임시 배열로 복사한 뒤 그 임시 배열을 dest로 복사하는 것처럼 복사가 이뤄진다.
memmove 구현
src >= dest
로 분기를 나누어 구현
src >= dest
인 경우 src의 앞 부분 부터 앞에서 뒤로
값을 옮기고
src < dest
인 경우 src의 뒷 부분부터 뒤에서 앞으로
값을 옮긴다
- 그렇게 해야 새로 갱신된 값의 영향을 받지 않을 수 있다.

출처 : https://hand-over.tistory.com/47