Search
Duplicate

[C]그림으로 살펴보는 memcpy

간단소개
[초보자 전용]그림으로 살펴보는 memcpy와 memmove!
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
42seoul
42cursus
Scrap
태그
넣어주세요
9 more properties

[libft_part1] memcpy!

틀린 내용이 있다면 댓글 혹은 슬랙 \@jjhang으로 연락드립니다.
이 문서는 아직 프로그래밍을 처음 배우는 단계에서, 그래픽을 통해 쉽게 메모리 블럭을 이해하기 위해 쓰여졌습니다.

I. 서론

C 프로그래밍 언어를 공부하는 초보자에게 42cursus의 첫 번째 과제인 libft는 중요한 시작입니다.(때로는 지루할 수도 있습니다!) 본과정에 올라온 러너들은 이 과제를 하면서 컴퓨터 과학의 기초를 다지고, 메모리 조작과 함수 구현을 통해 C 프로그래밍 스킬을 향상시키는 기회를 얻을 수 있습니다. 이번 글에서는 libft - Part 1의 일부로, 메모리 복사 함수인 memcpymemmove를 중심으로 이 함수들의 구현과 메모리 동작 원리에 대해 쉽게 설명하고자 합니다. 초보자들도 이해하기 쉽게 구체적인 내용을 다루어 보겠습니다.

II.본론

i) 메모리 복사 함수 - memcpymemmove

memcpymemmove 함수는 메모리 영역을 다른 메모리 영역으로 복사하는 데 사용됩니다. 이 함수를 이해하고 구현하는 것은 컴퓨터를 이해하는 시작이라고 할 수 있습니다.

ii) memcpy 함수의 구현

먼저, memcpy 함수의 구현을 살펴봅시다. 이 함수는 원본 메모리에서 목적지 메모리로 데이터를 복사합니다. 이를 위해 다음과 같은 단계를 따릅니다.
1.
원본 메모리와 목적지 메모리의 주소를 받습니다.
2.
복사할 바이트 수를 지정합니다.
3.
원본 메모리에서 목적지 메모리로 바이트 단위로 데이터를 복사합니다.
memcpy 함수는 메모리 블록을 덮어쓰기 때문에, 메모리 중첩이 없는 경우에 적합합니다.

iii) 주의점

C언어 문자열 전체를 복사할 때는 맨 뒤에 문자열의 끝을 알리는 ‘\0’의 길이도 계산해서 넣어야 합니다.
memcpy()는 src메모리 블록과 dst메모리 블록에 겹쳐져 있는 곳에서는 사용하지 못합니다. 만약 동일한 메모리 공간에 덮어씌워야 한다면 memmove함수를 사용하면 됩니다.
src를 dst로 복사할 때 문제가 발생되는 경우는 dst가 src와 주소를 공유할 때 주로 발생한다 : memcpy()함수의 오류는 이런 식으로 발생한다.
이 문제를 해결하기 위해 memcpy의 dst와 src는 restrict변수를 사용합니다. restrict에 대해 더 궁금하시다면 ‘여기’를 클릭해주세요!

iii) memmove 함수의 구현

memmove 함수는 memcpy와 유사하지만, 원본 메모리와 목적지 메모리가 중첩되어도 안전하게 복사합니다. 이 함수의 구현은 다음과 같습니다.
1.
원본 메모리와 목적지 메모리의 주소를 받습니다.
2.
복사할 바이트 수를 지정합니다.
3.
원본 메모리와 목적지 메모리의 중첩 여부를 확인합니다.
4.
중첩이 없다면, memcpy와 동일하게 동작합니다.
5.
중첩이 있다면, 중첩된 영역을 복사하기 위해 다양한 방법을 통해 메모리 블럭의 완전한 복사를 보장합니다.
memmove함수는 데이터 중첩이 있는 상황에서도 안전하게 사용할 수 있으며, 이러한 상황을 처리하기 위해 추가적인 동작들을 구현해야합니다. libft를 구현하면서 여러분의 고민들과 생각을 토대로 구현을 해보세요!

참고문헌