Я реализую фабричную систему, в которой для каждого объекта у меня есть Заголовок , скрытый до реального запуска экземпляра класса (memory = malloc(sizeof(Header) + sizeof(MyClass))
). И я часто использую reinterpret_cast<byte*>(this) - sizeof(Header)
для доступа к части заголовка (я намеренно пропустил детали выравнивания для упрощения).
Мой вопрос: буду ли я рисковать ошибками в кэше, если я получу доступ к адресу MyClass до доступа Заголовок адрес все время? Я видел, что есть прямая и обратная предварительная выборка, но работают ли они вместе? или они оптимизированы только для чистых l oop итераций?
(Говоря в более общем смысле, вопрос будет одинаковым для постоянного доступа к полю, объявленному после другого, скажем, к std::pair<void*, void*>::second
до std::pair<void*, void*>::first
, когда цикл по std::vector<std::pair<void*, void*>*>
)