ну вот для х86 и х86-64 это устроено так
начнем с того что само ядро имеет кешы первого уровня
ядро - контрол юнит и алу(условно, мб там ещё для флоатов для крипты или ещё чего нам сейчас не важно)
так вот контрол собственно заведует операндами, он берет их из кеша
сам кеш это что-то вроде масива из set'ов. один set хранит несколько скажем 'линий'(но там не линия, как то по другому называлось, я забыл уже). в этой 'линии' есть тег(кусок адреса, он есть ключ по которому ищем), флаги, и кеш линия(собственно данные из памяти, то что мы и хотим загрузить из кеша в контрол юнит).
пространство кеша ограничено, оно математически рассчитано так, что данные которые сохраняются в кеш линию выровнены на определенное парное число.
проблема появляется когда я не выровнял что-то в памяти и для загрузки процесору нужно взять первую кеш линию, отрезать от неё кусок, а потом ещё и найти остачу нашей переменной в другой кеш линии.