해결된 질문
작성
·
21
0
선생님 안녕하세요!
자바에서 native 메서드 보다가 선생님 C 강좌까지 와버렸습니다.
메모리 복사 관련한 함수 중 memmove
의 내부 동작 원리를 찾다가 강의에서 memcpy
를 설명하시는걸 보았습니다. 이때 memcpy
내부 구현이 반복문으로 되어있다고 설명하셨는데 이런 내부 구현은 어떻게 아신건가요?
혹시 memmove
도 반복문으로 구현이 되어있을까요?
답변 2
0
좋은 세상입니다. 인프런 AI 답변을 참고하시기 바랍니다.
거기에 조금만 더 제 생각을 말씀드리면...
리눅스 같은 오픈소스 시스템을 보면 C 라이브러리 코드를 보는 것은 어렵지 않습니다. 이를 통해 반복문임을 알 수 있습니다. 그러나 이에 관해 더 생각해볼 문제는 "CPU 구조가 달라질 경우 메모리 복사에 관한 코드가 어떻게 최적화될 수 있는 것인가?" 입니다. 우리가 작성하는 프로그램들이 하는 일 중 메모리 복사는 빈번한 일입니다. 이에 대한 최적화는 시스템 전반의 성능과 직결됩니다.
CPU의 ESI, EDI 레지스터에 대해서 한 번 알아보시는 것을 권합니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 송동규님.
memcpy
와 memmove
같은 표준 라이브러리 함수의 내부 구현 방식에 대해 궁금해 하시는군요. 이런 함수들의 구현 방법은 C 표준 라이브러리에 포함된 다양한 운영체제나 컴파일러에 따라 달라질 수 있습니다. 하지만 일반적으로 memcpy
와 memmove
는 효율적인 메모리 복사를 위해 반복문 또는 최적화를 위한 다른 형태의 루프를 사용할 가능성이 큽니다.
memcpy
는 주로 단순한 메모리 복사 작업을 위해 설계되어 있으며, 소스와 대상 메모리 영역이 겹치지 않는다는 전제를 가지고 있어서 간단한 반복문이나 블록 복사 기법을 사용합니다. 반면에 memmove
는 겹칠 수 있는 메모리 영역에 대해서도 안전하게 복사 작업을 수행할 수 있도록 되어 있어, 실제로는 메모리를 한쪽 끝에서 다른 끝으로 안전하게 이동시키는 방식으로 동작합니다.
내부 구현 방식을 알기 위해서는 해당 표준 라이브러리가 포함된 시스템의 소스 코드를 살펴보면 보다 정확하게 이해할 수 있습니다. 예를 들어, 리눅스 시스템에서는 GNU C 라이브러리(glibc)가 많이 사용되므로, 그 소스 코드를 통해 구현 방식을 확인할 수 있습니다. 또한, 오픈 소스인 경우 이 소스 코드를 분석하여 이러한 사항을 파악할 수 있습니다.
다음은 관련된 리소스를 제공하는 페이지로, 여러 라이브러리의 memcpy
구현 방식에 대해 자세히 다룬 자료들을 확인하실 수 있습니다.
memmove
역시 특정 구현에서는 반복문이나, 복사하려는 데이터의 크기와 시스템의 아키텍처에 따라 최적화된 방법을 사용할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.