C언어. memcpy()와 memmove() 알아보기
🌟 memcpy() VS memmove()
이름에서 보면 알 수 있듯 memcpy()는 메모리를 복사할 때 쓰고, memmove()는 메모리를 이동할 때 사용한다.
memcpy()의 원형은 이렇게 쓰고,
void* memcpy(void* dest, void* src, size_t size);
memmove()는 이렇게 생겼음.
void* memmove(void* dest, void* src, size_t size);
🌟 사용법
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define LEN 5
int main()
{
int arr1[LEN] = {1, 2, 3, 4, 5};
int* arr2 = (int*)malloc(LEN * sizeof(int));
memcpy(arr2, arr1, sizeof(int) * LEN); //arr1을 arr2에 복사 붙여넣기 함
}
arr1의 데이터를 arr2에 복사해서 넣어주었다. 여기서는 잘 나오겠지만, 사실 memcpy()는 loverlap 현상, 메모리가 겹칠 경우 대응이 안된다는 단점이 있다. 그럴 때 memmove()를 써야 함!
memcpy에서 함수 이름만 memmove로 바꾸면 memmove가 작동된다.
🌟 결론
☝ memcpy()는 메모리 겹침 현상에 오류가 난다.
☝ memmove()를 쓰는 게 더 안정적!
memcpy()는 메모리를 직접 복사해서 넣지만, memmove()는 임시 버퍼에 넣고 사용해서 그렇다고 한다. 나중에 오버랩 현상도 알아봐야지….
댓글남기기