У меня есть структура в Си, определенная так, чтобы это был размер строки кэша (64 байта).
typedef struct _list{
int value_1;
int value_2;
char padding[40];
struct _list * next;
struct _list * prev;
} list;
Тогда, если я создам элементы этого типа
volatile list * el1 = malloc(sizeof(list));
el1->value_1 = 1;
volatile list * el2 = malloc(sizeof(list));
el2->value_1 = 1;
volatile list * el3 = malloc(sizeof(list));
el3->value_1 = 1;
el1->next = el2;
el2->next = el3;
volatile list * temp = el1;
//flushed above elements from cache.
temp = temp->next;
элементы создаются с промежутком в 16 байтов между ними:
el1: value_1: 0x557816467530, next: 0x557816467560
el2: value_1: 0x557816467580, next: 0x5578164675b0,
С таким кодом, после очистки, с отключенными предварительными выборщиками, выполнение последней строки:
1) В кеше он только принесет элемент el1 и изменит темп, чтобы он смотрел на адрес, по которому смотрит следующий элемент el1. Этот код не приведет к тому, что элемент el2 будет занесен в кеш, верно?
2) принесет ли он в кеш адрес из следующей переменной? начиная с 0x557816467560 и плюс следующие соседние 64 байта? (Если так В следующих смежных байтах будет ли разрыв 16 байтов?)