인프런 커뮤니티 질문&답변
메모리 비교에 관한 질문
해결된 질문
작성
·
20
0
20:10 쯤에 메모리 비교같은 경우는 비교연산자로 되지 않기 때문에 반드시 전용함수를 사용해야한다 라고 하셨는데, for루프를 돌면서 비교연산자를 사용해서 비교 가능하지 않나요?? 그리고 memcmp()이 내부적으로 == 를 사용하지않고 두 요소를 빼는 방법을 사용하는 이유가 궁금합니다.
답변 2
0
네. 가능합니다. C언어에서 비교 연산자는 피연산자 중 좌항에서 우항을 빼서 그 결과가 0인지 확인하는 방식으로 작동합니다. 그러나 메모리의 주소나 포인터에 대해서 단순 뺄셈을 하는 것은 주소값 자체가 같은 것인지 비교하는 것이지 주소가 가리키는 메모리에 저장된 값이 같은지 비교하는 것이 아닙니다.
그리고 for루프를 돌면서 각 요소를 비교하도록 직접 구현 할 수도 있습니다. 그런데 이는 매우 잘못된 생각입니다. 이미 표준함수가 존재한다면 그 함수를 사용해야 합니다. 그렇지 않고 memcpy() 함수를 특별한 이유 없이 구현해 사용한다는 것은 매우 부적절하며 리팩토링 대상입니다.
끝으로 상등연산 대신 뺄셈을 수행하는 것은 결과적으로 같다 할 수 있습니다. AI 답변과 더불어 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 박현빈님.
메모리를 비교하는 것은 여러 가지 이유로 함수를 통해 수행하는 것이 일반적입니다. 메모리 블록은 단순히 숫자나 문자가 아닌 큰 단위의 데이터이기 때문에, 직접 비교 연산자로 처리하기보다는 전용 함수를 사용하는 것이 더 안전하고 효율적입니다.
물론, for 루프를 사용하면 메모리의 각 바이트를 비교할 수는 있지만, 이는 효율성과 유지보수 측면에서 권장되지 않습니다. memcmp() 함수는 이러한 바이트 단위의 작업을 최적화하여 수행합니다.
memcmp()가 두 요소를 비교할 때 두 값을 빼는 방식으로 동작하는 이유는 다음과 같습니다:
효율성: 두 요소의 차이를 계산하면 크기 관계를 판별할 수 있습니다. 이 방법은 매우 간단하고, CPU 입장에서는 덧셈 및 뺄셈이 매우 빠르게 수행될 수 있습니다.
세밀함: 두 값의 차이를 계산하면 완전히 동일한지, 어느 쪽이 더 큰지를 한 번에 알 수 있습니다.
플랫폼 독립성: C 라이브러리 함수들은 플랫폼 독립적으로 구현되어야 합니다. 비교 연산자로 직접 접근하는 것보다 차이를 수학적으로 계산하는 것이 더 일관성 있는 결과를 제공할 수 있습니다.
관련해서 유사한 질문과 답변이 있습니다:
- 메모리 비교와 memcmp(): 이 게시물에서는 메모리 비교를 어떻게 최적화할 수 있는지에 대해 설명하고 있습니다.
이러한 사유들로, memcmp()라는 전용 함수를 통해 대부분의 프로그래머가 메모리 비교를 처리하게 됩니다. 내부 구현 방식을 더 깊이 이해하고 싶으시다면, 여러 운영 체제 및 C 런타임 라이브러리의 소스 코드를 살펴보는 것도 큰 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





