> 백엔드 개발 > C++ > 문자열 필드가 달라도 이러한 값 유형이 동일한 해시 코드를 갖는 이유는 무엇입니까?

문자열 필드가 달라도 이러한 값 유형이 동일한 해시 코드를 갖는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-04 08:47:39
원래의
140명이 탐색했습니다.

Why Do These Value Types Have the Same Hash Code Despite Different String Fields?

ValueType 해시 코드 구현 이해

제공된 코드에서 두 구조 k1과 k2는 이름 필드에서 서로 다른 문자열 값을 가지지만 놀랍게도 동일한 결과를 반환합니다. 해시 코드. 이는 값 유형에 대한 GetHashCode의 복잡한 구현 때문입니다.

CLR의 값 유형 처리

참조 필드나 정렬 간격이 없는 값 유형의 경우 CLR은 다음을 사용합니다. 구조의 모든 비트를 XOR하는 신속한 해싱 메커니즘입니다. 그러나 참조 필드나 공백이 있는 경우 CLR은 보다 선택적인 접근 방식을 사용합니다.

선택적 필드 해싱

모든 필드를 고려하는 대신 CLR은 다음을 반복합니다. 구조의 필드를 식별하고 사용 가능한 첫 번째 필드(null이 아닌 값 유형 또는 객체 참조)를 식별합니다. 그런 다음 해당 단일 필드와 메서드 테이블 포인터를 사용하여 해시 코드가 계산되고 프로세스가 종료됩니다.

필드 선택

이것은 id 필드만 기여하는 이유를 설명합니다. 이름 필드가 다르더라도 제공된 예의 해시 코드입니다. 따라서 id와 Name 필드의 순서를 바꾸면 Name 필드가 해싱에 활용됩니다.

Decimal Quirks

특히 CLR의 빠른 해시에 버그가 있습니다. 소수 값을 포함하는 구조에 대한 계산입니다. Decimal의 비트는 숫자 값을 정확하게 반영하지 않으므로 경우에 따라 잘못된 해시 코드가 생성될 수 있습니다.

위 내용은 문자열 필드가 달라도 이러한 값 유형이 동일한 해시 코드를 갖는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿