Поведение предварительной выборки памяти при случайном доступе к блоку памяти - PullRequest
0 голосов
/ 22 февраля 2020

Я реализую фабричную систему, в которой для каждого объекта у меня есть Заголовок , скрытый до реального запуска экземпляра класса (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*>*>)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...