일반적으로 현대 프로세서의 예상 속도는 매우 복잡합니다. 이것은 정렬되지 않은 액세스뿐만 아니라 일반적으로 사실입니다.
현대 프로세서는 파이프 라인 아키텍처를 가지고 있으며, 명령어의 순서가 정해지지 않고 병렬 적으로 실행될 수 있으며 실행에 영향을 줄 수있는 많은 다른 것들이 있습니다.
정렬되지 않은 액세스가 지원되지 않는 경우 예외가 발생합니다. 그러나 지원되는 경우 많은 요소에 따라 속도가 느려질 수도 있고 그렇지 않을 수도 있습니다. 이러한 요인에는 정렬되지 않은 명령어의 전후에 실행 한 다른 명령어가 포함됩니다 (프로세서가 이전 명령어를 실행하는 동안 데이터를 가져 오기 시작하거나 대기중인 동안 후속 명령어를 수행 할 수 있기 때문에).
정렬되지 않은 액세스가 캐시 라인 경계에서 발생하는 경우 매우 다른 중요한 차이가 발생합니다. 일반적으로 정렬되지 않은 액세스에 대해 캐시에 대한 2 배 액세스가 발생할 수 있습니다. 액세스가 캐시 라인 경계를 넘어 서서 이중 캐시 누락을 야기 할 경우 실제 속도가 저하됩니다. 최악의 경우, 정렬되지 않은 2 바이트 읽기는 프로세서가 두 개의 캐시 라인을 메모리로 플러시 한 다음 메모리에서 2 개의 캐시 라인을 읽도록 요구할 수 있습니다. 그것은 많은 데이터 이동입니다.
최적화를위한 일반적인 규칙은 다음과 같습니다. 첫 번째 코드, 측정 한 다음 문제가있는 경우에만 솔루션을 찾아냅니다.
엄지 손가락 : 대부분의 아키텍처에서 정렬되지 않은 읽기는 정렬 된 읽기와 비교하여 ~ 2 배의 성능을 나타냅니다. 데이터를 얻고 수정하기 위해 두 번의 읽기 사이클이 필요합니다. 글쓰기는 좀 더 복잡합니다. –