캐시 메모리 공부를 할 때 Direct-mapped cache, Set-associative cache 를 배운다. 얘들을 잘 살펴보면 캐시 메모리의 인덱스로 중간 비트를 사용한다. 상위 비트를 사용할 수도 있을텐데, 중간 비트를 사용하는 이유가 있을까? 다음과 같이 4개의 블록을 가진 캐시가 있다고 생각해보자. 이때 상위 비트 인덱싱을 하면 다음과 같다. 보는바와 같이 인접한 메모리 블록들이 같은 캐시 엔트리로 매핑된다. 메모리 블록에서 상위 4개는 캐시의 첫번째 블록에, 밑의 3개는 두번째 블록에, 그 밑의 3개는 세번째 블록에 매핑된다. 만약에 어떤 프로그램이 좋은 spatial locality를 갖고 있고, 어레이의 원소를 순차적으로 훑는 걸 생각해보자. 그렇게 되면, 캐시는 그 어레이를 훑을 때..