дает противоречивые ответы, может быть есть кто-то кто понимает лучше.
У нас есть понятие cache line, миниманьный блок информации обмена между CPU и памятью. Он, вроде как, 64 байта.
Когда я запрашиваю 1 байт, то все равно RAM прочитает все 64 байта, содержащие нужный мне 1 байт, так? Или оно вернет в 64-байтовом пакете 1 байт?
Если оно считает все 64 байта, что вокруг - то в чем смысл располагать структуру типа char-double-char на 24 байтах? В чем смысл делать alignment вообще?
лучше тебе почитать целую статью про то, что такое и зачем нужны кеши в cpu и как они работают, потому что это отдельная большая тема. вкратце: - некоторые cpu не поддерживают вообще, либо очень медленно выполняют unaligned access - в кеш загружаются вся кеш линия. так работает RAM и шина памяти, в идеале минимизировать ненужное захламление кеша структурами, к-е их пересекают. для атомарных CAS операций обычно происходит лок всей кешлинии, поэтому нужно понимать, что и зачем ты лочишь. ещё ввели std::hardware_destructive_interference_size, к-я гарантирует, что два объекта будут разнесены по кешлиниям.
Обсуждают сегодня